10.06.2008
NSArray und NSMutableArray
In diesem Artikel werden die Klassen NSArray und NSMutableArray kurz beschrieben. Außerdem wird die Anwendung einiger weniger ausgewählter Funktionen demonstriert.
Die folgende Funktion zeigt die Verwendung von NSArray.
void arrayTest() {
//Declare NSArray
NSArray* array;
//Declare NSNumber
NSNumber* number;
//Alloc and init NSNumber with 42
number = [[NSNumber alloc]initWithInt:42];
//Alloc and init NSArray with a NSNumber and a NSString
array = [[NSArray alloc]initWithObjects: number, @"Arthur Dent", nil];
//Print the content of the array
print(array);
//Release number and array
[number release];
[array release];
}
Als ersters wird eine Variable array deklariert. Danach wird eine Variable number deklariert, allokiert und mit 42 initialisiert. Dann wird das array allokiert und mit Objekten number und "Arthur Dent" initialisiert. Abließend wird ein nil übergeben um das Ende des Arrays die signalisieren. Mit print werden die Elemente des array auf der Console ausgegeben.
Die Funktion print sieht folgendermaßen aus:
void print(NSObject* aCollection) {
//Declare a NSEnumerator
NSEnumerator* aEnum;
//Declare an object
id object;
//Get an enumerator
aEnum = [aCollection objectEnumerator];
//Iterate while there is a next object
while( (object = [aEnum nextObject]) ) {
//Print object
NSLog(@"%@",object);
}
}
Die Print-Funktion erzeugt einen Enumerator indem die Nachricht objectEnumerator an die Collection geschickt wird. Da NSArray von NSObject erbt, ist die Parameterübergabe an die print-Funktion richtig. Obwohl die Klasse NSObject keine Funktion objectEnumeratorbesitzt, kommt die Nachricht bei der Klasse NSArray an. Der Enumerator wird verwendet um in der while-Schleife über die Collection zu iterieren. Bei jedem Schleifendurchlauf wird der Wert des Element ausgegeben.
Wie in dem Beispiels zu sehen ist, müssen die Werte innerhalb des Arrays während die Initialisierung übergeben werden. Sie können danach nicht mehr verändert werden. (Die Objekte selbst schon, aber nicht innerhalb des Arrays.). D.h. es können keine Elemente gelöscht oder hinzugefügt werden. Abhilfe schafft die Klasse NSMutableArray, die im Folgenden erklärt wird.
void arrayMutableTest() {
//Declare NSMutableArray
NSMutableArray* array;
//Allocate and init the NSMutableArray
array = [[NSMutableArray alloc] init];
//Declare NSNumber
NSNumber* number;
//Alloc and init NSNumber with 42
number = [[NSNumber alloc]initWithInt:42];
//Insert a NSNumber at index 0
[array insertObject:number atIndex:0];
//Insert a NSString at the end of the array
[array insertObject:@"Arthur Dent" atIndex:[array count]];
//Print the content of the array
print(array);
//Release number and array
[number release];
[array release];
}
In dieser Funktion wird ein NSMutableArray deklariert, allokiert und initialisiert. Dieses Array enthält zu Beginn keine Elemente. Dann wird wieder ein Objekt vom Typ NSNumber erzeugt und an der ersten Position (Index 0) eingefügt. Als nächstes wird ein String am Ende eingefügt. Dafür wird die Funktion count des Array aufgerufen um den maximalen Index zu bestimmen. Dann wird das Array auf der Console ausgegeben. Da NSMutableArray von NSArray erbt, kann die gleiche print-Funktion wie schon in der Funktion arrayTest verwendet werden.
Die Ausgabe auf der Console sieht folgendermaßen aus:
2008-06-10 20:11:32.519 ContainerTest[51835:10b] 42 2008-06-10 20:11:32.522 ContainerTest[51835:10b] Arthur Dent 2008-06-10 20:11:32.522 ContainerTest[51835:10b] 42 2008-06-10 20:11:32.522 ContainerTest[51835:10b] Arthur DentTweet