Wie konvertiere ich NSMutableArray zu NSArray in objektiv-c ?
Antworten
Zu viele Anzeigen?NSArray *array = [mutableArray copy];
Copy
erstellt unveränderliche Kopien. Dies ist sehr nützlich, da Apple verschiedene Optimierungen vornehmen kann. Zum Beispiel das Senden von copy
zu einem unveränderlichen Array behält nur das Objekt bei und gibt self
.
Wenn Sie keine Garbage Collection oder ARC verwenden, denken Sie daran, dass -copy
behält das Objekt bei.
Eine NSMutableArray
ist eine Unterklasse von NSArray
Sie werden also nicht immer konvertieren müssen, aber wenn Sie sicherstellen wollen, dass das Array nicht verändert werden kann, können Sie eine NSArray
auf eine der beiden Arten, je nachdem, ob Sie die automatische Freigabe wünschen oder nicht:
/* Not autoreleased */
NSArray *array = [[NSArray alloc] initWithArray:mutableArray];
/* Autoreleased array */
NSArray *array = [NSArray arrayWithArray:mutableArray];
EDITAR: Die Lösung von Georg Schölly ist ein besserer Weg und viel sauberer, besonders jetzt, da wir ARC haben und nicht einmal Autorelease aufrufen müssen.
Mir gefallen beide der 2 Hauptlösungen:
NSArray *array = [NSArray arrayWithArray:mutableArray];
Oder
NSArray *array = [mutableArray copy];
En Hauptunterschied Ich sehe in ihnen ist, wie sie sich verhalten, wenn mutableArray gleich null ist :
NSMutableArray *mutableArray = nil;
NSArray *array = [NSArray arrayWithArray:mutableArray];
// array == @[] (empty array)
NSMutableArray *mutableArray = nil;
NSArray *array = [mutableArray copy];
// array == nil
Objektiv-C
Im Folgenden wird beschrieben, wie NSMutableArray in NSArray umgewandelt werden kann:
//oldArray is having NSMutableArray data-type.
//Using Init with Array method.
NSArray *newArray1 = [[NSArray alloc]initWithArray:oldArray];
//Make copy of array
NSArray *newArray2 = [oldArray copy];
//Make mutablecopy of array
NSArray *newArray3 = [oldArray mutableCopy];
//Directly stored NSMutableArray to NSArray.
NSArray *newArray4 = oldArray;
Schnell
In Swift 3.0 gibt es einen neuen Datentyp Array . Array deklarieren mit let
Schlüsselwort, dann würde es zu NSArray Und wenn die Erklärung mit var
Schlüsselwort, dann ist es zu NSMutableArray .
Beispiel-Code:
let newArray = oldArray as Array
- See previous answers
- Weitere Antworten anzeigen