Ich habe eine neue Frage, wann ich die Elemente eines NSArray freigeben soll. Siehe folgenden Pseudocode:
%Vor%Meine Frage hier ist, wenn ich 2DArray veröffentliche, muss ich jedes Element (Array) zuerst explizit freigeben? Muss ich vor der Freigabe des "array" -Objekts jedes Element (MyObject) zuerst freigeben?
Ich bin neu in Objective C. Bitte helfen Sie. Vielen Dank.
Nein, Sie müssen nicht jedes Objekt als release
d angeben. Wenn Sie eine release
-Methode an eine NSArray
senden, sendet sie automatisch eine release
-Methode an jedes Element innerhalb der ersten.
Also schickst du in deinem Fall [2DArray release]
. Dies sendet [array release]
automatisch an jedes andere Array, das [obj release]
an jedes Objekt in jedem array
sendet.
Sie müssen die aufbewahrten Objekte nicht freigeben. NSArray behält sie beim Hinzufügen bei und gibt sie bei der Freigabe frei. Wenn Sie also das Array zuordnen und dann freigeben, wird das Objekt im Array die Retain-Anzahl von 1 haben. Sobald das Array freigegeben ist, wird das Objekt freigegeben und daher freigegeben.
Wenn ein Objekt erstellt wird, hat es eine Retain-Anzahl von 1. Immer wenn ein Objekt zu einem Array hinzugefügt wird, wird seine Retain-Anzahl erhöht (in diesem Fall auf 2). Nach dem Hinzufügen zum Array gibt Ihr Code das Objekt frei und löscht seinen Retain-Zähler um 1 (in diesem Fall auf 1). Dann, wenn Sie das Array freigeben, ruft es die Freigabe für alle darin enthaltenen Elemente auf, wobei die Retain-Anzahl um 1 (in diesem Fall auf 0) reduziert wird. Wenn der Retain-Wert 0 erreicht, wird das Objekt freigegeben.
Ihr Code sieht von einem Speicherverwaltungsstandpunkt aus korrekt aus.
Tags und Links arrays objective-c memory-management