394 Stimmen

Wie kann ich NSMutableArray in NSArray umwandeln?

Wie konvertiere ich NSMutableArray zu NSArray in objektiv-c ?

524voto

Georg Schölly Punkte 120083
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.

363voto

hallski Punkte 116251

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.

116voto

Richard Venable Punkte 7822

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

18voto

Jerry Thomsan Punkte 1409

Versuchen Sie diesen Code

NSMutableArray *myMutableArray = [myArray mutableCopy];

y

NSArray *myArray = [myMutableArray copy];

8voto

Sakir Sherasiya Punkte 1542

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X