2 Stimmen

Sendet eine Sammlung eine -Release-Nachricht an alle Objekte, die sie enthält, wenn ich ihr eine -Release-Nachricht sende?

Ich habe gelesen, dass, wenn eine Sammlung "freigegeben" wird, auch alle ihre Objekte freigegeben werden. Andererseits habe ich auch gelesen, dass eine Sammlung ihre Objekte freigibt, sobald die Sammlung freigegeben wird.

Letzteres ist aber nicht immer der Fall, wie Apple sagt. Das System entscheidet, ob es gut ist, die Zuordnung aufzuheben oder nicht. In den meisten Fällen wird es das tun, aber in manchen Fällen nicht.

Ich frage mich also, ob eine Sammlung Speicherlecks wie diese verursachen kann? Und wenn es tut -freigeben alle seine Objekte auf eine -freigeben Nachricht an die Sammlung selbst, dann sollte es tatsächlich -retain alle Objekte innerhalb der Sammlung, sobald ich -retain die Sammlung selbst.

Helfen Sie mir, mir ein klares Bild davon zu machen. Danke!

8voto

Marc Charbonneau Punkte 40221

Wenn Sie ein Objekt zu einer Sammlung hinzufügen, bleibt es in der Sammlung erhalten, bis es entfernt oder die Zuordnung der Sammlung aufgehoben wird. Spätere Retain- oder Release-Nachrichten, die an die Sammlung gesendet werden, ändern nicht die Retain-Zahl der Objekte innerhalb der Sammlung.

Mit anderen Worten: Betrachten Sie es als Eigentum und nicht als Zählung der Rücklagen.

4voto

Steven Fisher Punkte 43762

Das Senden einer Freigabe an ein Objekt verringert die Anzahl der aufbewahrten Objekte. Wenn der Retention Count Null erreicht, wird es zerstört. Wenn ein Container zerstört (nicht freigegeben) wird, werden seine Objekte freigegeben (aber nicht zerstört, wenn ihr Retention Count aus anderen Gründen ungleich Null ist).

Kurze Antwort: Das wird alles so funktionieren, wie du es erwartest. Dein Problem ist, dass du "freigelassen" als "zerstört" ansiehst. Das ist etwas anderes.

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