Neues für Arrays
Ebenfalls verkürzt hat sich im modernen Objective-C die Deklaration und Initialisierung von NSArray oder NSMutableArray-Objekten. Benutzte man bisher oft die Anweisung initWithObjects, gibt es jetzt auch hier einen Convenience Allocator, ein @ mit einem Paar eckigen Klammern. Der Befehl nil, mit dem in der Vergangenheit das Ende eine Arrays kenntlich gemacht wurde, ist auch nicht länger erforderlich.
Ebenfalls verkürzt hat sich im modernen Objective-C die Deklaration und Initialisierung von NSArray oder NSMutableArray-Objekten. Benutzte man bisher oft die Anweisung initWithObjects, gibt es jetzt auch hier einen Convenience Allocator, ein @ mit einem Paar eckigen Klammern. Der Befehl nil, mit dem in der Vergangenheit das Ende eine Arrays kenntlich gemacht wurde, ist auch nicht länger erforderlich.
//
Alte Schreibweise NSArray *oldArray = [[NSArray alloc] initWithObjects:@"Hallo Welt",@"Hello Array", nil]; // Neue Schreibweise NSArray *newArray = @[@"Hallo Welt", @"Hallo Array"]; |
Besonders viel Schreibarbeit lässt sich einsparen, soll ein Array aus NSNumber-Objekten erstellt werden.
//
Alte Schreibweise NSArray *oldArray = [[NSArray alloc] initWithObjects: [NSNumber numberWithDouble:3.145], [NSNumber numberWithDouble:9.876], [NSNumber numberWithDouble:1.234], nil]; // Neue Schreibweise NSArray *newArray = @[@3.145,@9876,@1.234]; |
Leider lassen sich mit der neuen Schreibweise nur unveränderliche, inmutable, Auflistungen erzeugen. Möchte man statt eines NSArray ein NSMutableArray anlegen, um später weitere Objekte hinzuzufügen, muss von der gesamte Liste eine Kopie erstellt werden.
NSMutableArray *newArray = [@[@3.145,@9876,@1.234] mutableCopy]; |
Der Zugriff auf einzelnen Objekte des Array wurde ebenfalls vereinfacht. Benötigte man in der Vergangenheit noch Anweisungen wie objectAtIndex, kann jetzt, wie in vielen anderen Programmiersprachen auch, ein Indexposition in einer eckigen Klammer angegeben werden.
//
Alte Schreibweise NSNumber *num1 = [newArray objectAtIndex:1]; // Neue Schreibweise NSNumber *num2 = newArray[1]; |