Objectiv C iPhone wann Objektverweise auf Null gesetzt werden sollen

8

Ich habe mich schon länger mit Objective C und dem Cocoa Framework entwickelt. Es ist mir aber immer noch nicht ganz klar, wann ich Objektreferenzen auf Null setzen soll. Ich weiß, dass dies empfohlen wird, bevor ein Objekt freigegeben wird, das über einen Delegaten verfügt, und Sie sollten dies auch in der viewDidUnload-Methode für beibehaltene Subviews tun. Aber wann genau sollte das gemacht werden und warum? Was genau erreicht es? Vielen Dank im Voraus.

-Oscar

    
Oscar Gomez 03.11.2009, 23:41
quelle

1 Antwort

40

Angenommen, Sie haben einen Zeiger myView in der Schnittstelle Ihrer Klasse definiert:

%Vor%

Dann können Sie diese Variable irgendwann in Ihrem Code freigeben:

%Vor%

Nachdem Sie das getan haben, wird myView , der Zeiger, nicht auf Null zeigen, sondern auf eine Speicheradresse eines Objekts zeigen, das möglicherweise nicht mehr existiert (seit Sie es gerade freigegeben haben). Also, wenn du danach etwas tust, wie:

%Vor%

Sie erhalten einen Fehler.

Wenn Sie das andererseits tun:

%Vor%

Der Aufruf von addSubview hat keine negativen Auswirkungen, da Nachrichten an nil ignoriert werden .

Als Konsequenz können Sie Vorschläge zur Verwendung von retain -Eigenschaften sehen, wie zum Beispiel:

%Vor%

und dann im Code, mach einfach:

%Vor%

Dadurch wird der synthetisierte Accessor das alte Objekt freigeben und den Verweis auf null in einer Codezeile setzen. Dies kann sich als nützlich erweisen, wenn Sie sicherstellen möchten, dass alle Ihre Eigenschaften freigegeben und auf null gesetzt sind.

Eine Sache, die Sie nie vergessen sollten, ist, dass die Speicherverwaltung über retain release Aufrufe erfolgt und nicht über die Zuweisung von nil. Wenn Sie ein Objekt mit einer Retain-Anzahl von 1 haben und seiner einzigen Variablen Null zuweisen, werden Sie Speicher verlieren:

%Vor%     
pgb 03.11.2009, 23:50
quelle