Inhaltsverzeichnis
Foundation
Foundation ist das Basis-Framework von Apple für MacOS X und iOS.
Die Klassen von Foundation beginnen i.d.R. mit dem Kürzel „NS“ als Abkürzung für das, von Steve Jobs entwickelte, Betriebssystem NeXTSTEP, auf dessen Komponenten MacOS X basiert.
Hello World
Ein einfaches Programm in Objective-C mit dem Foundation-Framework und NSAutorelasePool
:
- helloworld.m
#import <Foundation/Foundation.h> int main(int argc, char const *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSLog("Hello World!"); [pool drain]; return 0; }
Logging mit NSLog
Logging einer Variable foo
vom Typ NSString
:
NSLog(@"foo: %@", foo);
Konstanten
Konstanten sollten mit dem Foundation-Framework als „statische Eigenschaften“ definiert werden, statt über das noch aus C übliche #define
(siehe dazu Objective-C: Konstanten).
Für eine statische Eigenschaft wird in der Header-Datei einer Klasse über dem @interface
-Block diese mit den Schlüsselwörtern extern
und const
definiert. Bei der Benennung der Konstanten ist es auch oft üblich diese mit einem kleinen „k“ zu beginnen.
extern NSString * const kFooBar;
In der Implementierungs-Datei wird dann der statischen Eigenschaft ein Wert zugewiesen. Dabei kann dann auf das Schlüsselwort extern
verzichtet werden, das Schlüsselwort const
muss aber beibehalten werden:
NSString * const kFooBar = @"SomeConstantValue";
Quelle: Stack Overflow: What is the best way to create constants in Objective-C?
Zahlen
Literal
Mit dem Prefix @
kann ein NSNumber
-Objekt direkt mit Zahl oder sogar mit einem String initialisiert werden:
NSNumber *number = @42;
Quelle: Clang 3.7: Objective-C Literals
String zu Zahl
Um ein String als Zahl verwenden zu können, muss der String mittels des NSNumberFormatters
in eine Zahl vom Typ NSNumber
umgewandelt werden:
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; numberFormatter.numberStyle = NSNumberFormatterDecimalStyle; NSNumber *foo = [numberFormatter numberFromString:@"42"];
Quelle: Stack Overflow: How to convert an NSString into an NSNumber
Strings
Formatieren
Teile in einem String ersetzten
Um Teile in einem String zu ersetzen gibt es in jedem Objekt der Klasse NSObject
die Methode stringByReplacingOccurrencesOfString:withString:
:
NSString *foo = @"Hello World"; NSString *bar = [foo stringByReplacingOccurrencesOfString:@"World" withString:@"Sky"]; // Hello Sky
Quelle: Stack Overflow: Replace a substring with another substring
Arrays
Definition eines Arrays als „Literal“, mit zwei String-Werten:
NSArray *foobar = @[@"foo", @"bar"];
Durch ein Array mit einem Block iterieren
NSArray *foo = [NSArray arrayWithObjects:@"foo", @"bar", @"foobar", nil]; [foo enumerateObjectsUsingBlock:^(id value, NSUInteger index, BOOL *stop) { NSLog(@"%lu: %@", index, value); }];
NSSet in NSArray/NSMutableArray
NSSet *foo = [[NSSet alloc] init] // ... NSMutableArray *foobar = [NSMutableArray arrayWithArray[foo allObjects]]; // Alternative: NSMutableArray *barfoo = [[foo allObjects] mutableCopy];
NSDictionary
NSDictionary in NSData konvertieren
NSData *fooData = [NSKeyedArchiver archivedDataWithRootObject:fooDictionary];
NSData in NSDictionary konvertieren
NSDictionary *fooDictionary = (NSDictionary *)[NSKeyedUnarchiver unarchiveObjectWithData:fooData];
Datum/Uhrzeit
Aktuelles Datum und Uhrzeit
Das aktuelle Datum die aktuelle Uhrzeit liefert die Klassen-Methode date
der Klasse NSDate
:
NSDate *now = [NSDate date]
Daten vergleichen
Daten lassen sich am besten über die Methode compare:
der Klasse NSDate
vergleichen:
if ( [date1 compare:date2] == NSOrderedSame ) { // date1 and date2 are the same } if ( [date1 compare:date2] == NSOrderedDescending ) { // date1 is after/later than date2 } if ( [date1 compare:date2] == NSOrderedAscending ) { // date1 is before/earlier than date2 }
Details in der Dokumentation von NSDate.
Quelle: Stack Overflow: How to compare two NSDates: which is more recent?
Timer
NSPredicate
Mit NSPredicate
können Daten-Sätze in Arrays oder Sets oder aus Core Data nach Vorgaben gefiltert werden.
- NSHipster: NSPredicate
Eine gute Übersicht über die Verwendung von NSPredicate mit Syntax in Objective-C und Swift.