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.
Ein einfaches Programm in Objective-C mit dem Foundation-Framework und NSAutorelasePool
:
#import <Foundation/Foundation.h> int main(int argc, char const *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSLog("Hello World!"); [pool drain]; return 0; }
Logging einer Variable foo
vom Typ NSString
:
NSLog(@"foo: %@", foo);
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?
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
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
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
Definition eines Arrays als „Literal“, mit zwei String-Werten:
NSArray *foobar = @[@"foo", @"bar"];
NSArray *foo = [NSArray arrayWithObjects:@"foo", @"bar", @"foobar", nil]; [foo enumerateObjectsUsingBlock:^(id value, NSUInteger index, BOOL *stop) { NSLog(@"%lu: %@", index, value); }];
NSSet *foo = [[NSSet alloc] init] // ... NSMutableArray *foobar = [NSMutableArray arrayWithArray[foo allObjects]]; // Alternative: NSMutableArray *barfoo = [[foo allObjects] mutableCopy];
NSData *fooData = [NSKeyedArchiver archivedDataWithRootObject:fooDictionary];
NSDictionary *fooDictionary = (NSDictionary *)[NSKeyedUnarchiver unarchiveObjectWithData:fooData];
Das aktuelle Datum die aktuelle Uhrzeit liefert die Klassen-Methode date
der Klasse NSDate
:
NSDate *now = [NSDate date]
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?
Mit NSPredicate
können Daten-Sätze in Arrays oder Sets oder aus Core Data nach Vorgaben gefiltert werden.