Benutzer-Werkzeuge

Webseiten-Werkzeuge


apple:foundation:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
apple:foundation:start [2015-02-28 05:47] – angelegt a.kamolaapple:foundation:start [2015-03-16 12:56] (aktuell) – [Zahlen] "Literal" eingefügt a.kamola
Zeile 3: Zeile 3:
 //Foundation// ist das Basis-Framework von Apple für [[macosx:development|MacOS X]] und [[ios:development|iOS]]. //Foundation// ist das Basis-Framework von Apple für [[macosx:development|MacOS X]] und [[ios:development|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 [[wp:nextstep|NeXTStep]], auf dessen Komponenten MacOS X basiert.+Die Klassen von Foundation beginnen i.d.R. mit dem Kürzel "NS" als Abkürzung für das, von Steve Jobs entwickelte, Betriebssystem [[wp>NeXTSTEP|NeXTSTEP]], auf dessen Komponenten MacOS X basiert. 
 + 
 +===== Hello World ===== 
 + 
 +Ein einfaches Programm in [[objc:start|Objective-C]] mit dem Foundation-Framework und ''NSAutorelasePool'': 
 + 
 +<code objc 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; 
 +
 +</code> 
 + 
 +===== Logging mit NSLog ===== 
 + 
 +Logging einer Variable ''foo'' vom Typ ''NSString'': 
 + 
 +<code objc> 
 +NSLog(@"foo: %@", foo); 
 +</code> 
 + 
 +===== Konstanten ===== 
 + 
 +Konstanten sollten mit dem Foundation-Framework als "statische Eigenschaften" definiert werden, statt über das noch aus [[c:start|C]] übliche ''#define'' (siehe dazu [[objc:start#konstanten|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. 
 + 
 +<code objc> 
 +extern NSString * const kFooBar; 
 +</code> 
 + 
 +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: 
 + 
 +<code objc> 
 +NSString * const kFooBar = @"SomeConstantValue"; 
 +</code> 
 + 
 +Quelle: [[http://stackoverflow.com/a/17228508|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: 
 + 
 +<code objc> 
 +NSNumber *number = @42; 
 +</code> 
 + 
 +Quelle: [[http://clang.llvm.org/docs/ObjectiveCLiterals.html|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: 
 + 
 +<code objc> 
 +NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; 
 + 
 +numberFormatter.numberStyle = NSNumberFormatterDecimalStyle; 
 + 
 +NSNumber *foo = [numberFormatter numberFromString:@"42"]; 
 +</code> 
 + 
 +Quelle: [[http://stackoverflow.com/questions/1448804/how-to-convert-an-nsstring-into-an-nsnumber|Stack Overflow: How to convert an NSString into an NSNumber]] 
 + 
 +===== Strings ===== 
 + 
 +==== Formatieren ==== 
 + 
 +[[https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html#//apple_ref/doc/uid/TP40004265-SW1|String Format Specifiers]] 
 + 
 +==== Teile in einem String ersetzten ==== 
 + 
 +Um Teile in einem String zu ersetzen gibt es in jedem Objekt der Klasse ''NSObject'' die Methode ''stringByReplacingOccurrencesOfString:withString:'': 
 + 
 +<code objc> 
 +NSString *foo = @"Hello World"; 
 +NSString *bar = [foo stringByReplacingOccurrencesOfString:@"World" withString:@"Sky"]; 
 +// Hello Sky 
 +</code> 
 + 
 +Quelle: [[http://stackoverflow.com/a/3613887|Stack Overflow: Replace a substring with another substring]] 
 + 
 +===== Arrays ===== 
 + 
 +Definition eines Arrays als "Literal", mit zwei String-Werten: 
 + 
 +<code objc> 
 +NSArray *foobar = @[@"foo", @"bar"]; 
 +</code> 
 + 
 +==== Durch ein Array mit einem Block iterieren ==== 
 + 
 +<code objc> 
 +NSArray *foo = [NSArray arrayWithObjects:@"foo", @"bar", @"foobar", nil]; 
 + 
 +[foo enumerateObjectsUsingBlock:^(id value, NSUInteger index, BOOL *stop) { 
 + NSLog(@"%lu: %@", index, value); 
 +}]; 
 +</code> 
 + 
 +==== NSSet in NSArray/NSMutableArray ==== 
 + 
 +<code objc> 
 +NSSet *foo = [[NSSet alloc] init] 
 + 
 +// ... 
 + 
 +NSMutableArray *foobar = [NSMutableArray arrayWithArray[foo allObjects]]; 
 + 
 +// Alternative: 
 + 
 +NSMutableArray *barfoo = [[foo allObjects] mutableCopy]; 
 +</code> 
 + 
 +===== NSDictionary ===== 
 + 
 +==== NSDictionary in NSData konvertieren ==== 
 + 
 +<code objc> 
 +NSData *fooData = [NSKeyedArchiver archivedDataWithRootObject:fooDictionary]; 
 +</code> 
 + 
 +==== NSData in NSDictionary konvertieren ==== 
 + 
 +<code objc> 
 +NSDictionary *fooDictionary = (NSDictionary *)[NSKeyedUnarchiver unarchiveObjectWithData:fooData]; 
 +</code>
  
 ===== Datum/Uhrzeit ===== ===== Datum/Uhrzeit =====
Zeile 14: Zeile 149:
 NSDate *now = [NSDate date] NSDate *now = [NSDate date]
 </code> </code>
 +
 +==== Daten vergleichen ====
 +
 +Daten lassen sich am besten über die Methode ''compare:'' der Klasse ''NSDate'' vergleichen:
 +
 +<code objc>
 +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
 +}
 +</code>
 +
 +Details in der [[https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSDate_Class/index.html#//apple_ref/occ/instm/NSDate/compare:|Dokumentation von NSDate]].
 +
 +Quelle: [[http://stackoverflow.com/a/5965106|Stack Overflow: How to compare two NSDates: which is more recent?]]
 +
 +===== Timer =====
 +
 +[[https://developer.apple.com/library/ios/documentation/cocoa/reference/foundation/classes/NSTimer_Class/Reference/NSTimer.html|NSTimer Class Reference]]
 +
 +===== NSPredicate =====
 +
 +Mit ''NSPredicate'' können Daten-Sätze in Arrays oder Sets oder aus [[apple:coredata:start|Core Data]] nach Vorgaben gefiltert werden.
 +
 +  * [[http://nshipster.com/nspredicate/|NSHipster: NSPredicate]]\\ Eine gute Übersicht über die Verwendung von NSPredicate mit Syntax in [[objc:start|Objective-C]] und [[swift:start|Swift]].
apple/foundation/start.1425098852.txt.gz · Zuletzt geändert: 2015-02-28 05:47 von a.kamola