Frage initWithCapacity: in NSArray


initWithCapacity: ist in deklariert NSMutableArray, aber ich möchte es verwenden, um ein zu initialisieren NSArray. Ich habe da irgendeine Lösung?


9
2017-10-01 09:45


Ursprung


Antworten:


Schon seit NSArray Objekte sind unveränderlich (sie können die darin enthaltenen Objekte nicht ändern). Es ist nicht sinnvoll, die Kapazität von NSArrays.

Die Kapazität ist die Anzahl der Objekte, die ein Array enthalten kann, ohne Speicher neu zuzuweisen. Es wird nur zur Optimierung verwendet.


10
2017-10-01 09:58



Es macht keinen Sinn ein zu initiieren NSArray verwenden initWithCapacity:, weil Sie nachträglich keine Objekte hinzufügen können. Ein NSArray ohne Objekte hat eine De-facto-Kapazität von 0. Was willst du wirklich erreichen?


6
2017-10-01 09:58



Mach einfach ein NSMutableArray mit initWithCapacity:, füllen Sie es mit Zeug und machen Sie dann ein NSArray davon.

Sie können entweder Folgendes verwenden:

NSArray *_immutableArray = [_mutableArray copy];
...
[_immutableArray release];

Oder:

NSArray *_immutableArray; 
[_immutableArray initWithArray:_mutableArray];
...
[_immutableArray release];

Oder:

NSArray *_immutableArray = [NSArray arrayWithArray:_mutableArray];

5
2017-10-01 10:55