iphone NSManagedObject - Die richtige Art der Freigabe?

7

Ich habe eine Unterklasse von NSManagedObject, die meisten Eigenschaften sind dynamisch (erstellt vom verwalteten Objekt), aber ich habe ein paar Helfereigenschaften, die als @synthesize erstellt werden.

Was ist die richtige Art, diese Objekte freizugeben?

%Vor%

oder

%Vor%     
aryaxt 05.01.2011, 02:28
quelle

3 Antworten

11

Überschreibe didTurnIntoFault und gib sie dort frei. Verwaltete Objekte werden nicht notwendigerweise freigegeben, wenn sie fehlerhaft sind.

Aus der Dokumentation :

  

Es wird davon abgeraten, dealloc oder finalize zu überschreiben, da didTurnIntoFault normalerweise eine bessere Zeit zum Löschen von Werten bietet - ein verwaltetes Objekt wird möglicherweise für einige Zeit nicht wiederhergestellt, nachdem es in einen Fehler umgewandelt wurde. Core Data garantiert nicht, dass entweder dealloc oder finalize in allen Szenarien aufgerufen wird (z. B. wenn die Anwendung beendet wird). Sie sollten daher in diesen Methoden keine erforderlichen Nebenwirkungen (wie Speichern oder Ändern des Dateisystems, Benutzereinstellungen usw.) berücksichtigen.

    
BoltClock 05.01.2011, 02:36
quelle
6

Sie können sich das Handbuch zur Kerndatenprogrammierung genauer ansehen. Diese beiden Passagen sind von besonderer Relevanz.

  

Wenn Sie eine benutzerdefinierte Instanz definieren   Variablen sollten Sie diese aufräumen   Variablen in didTurnIntoFault eher   als dealloc oder finalisieren.

und

  

Sie sollten normalerweise nicht überschreiben   dealloc oder finalisieren, um Transienten zu löschen   Eigenschaften und andere Variablen.   Stattdessen sollten Sie überschreiben   didTurnIntoFault.

    
westsider 05.01.2011 02:43
quelle
4

[Das sollte wirklich ein Kommentar sein, weil ich auf ein anderes Problem der Frage hinweise, aber ich möchte die Codeformatierungsfunktion].

Tue das nie:

%Vor%

Dadurch wird das Objekt freigegeben, auf das die Eigenschaft backing ivar zeigt, aber der Zeiger selbst wird nicht auf Null gesetzt. Dies bedeutet, dass Sie möglicherweise einen falschen Zeiger haben, wenn die Freigabe dazu führt, dass das Objekt freigegeben wird. Tun Sie dies entweder:

%Vor%

oder das

%Vor%

Die erste Form wird überall bevorzugt, außer in dealloc.

    
JeremyP 05.01.2011 14:37
quelle