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% Ü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
oderfinalize
zu überschreiben, dadidTurnIntoFault
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 entwederdealloc
oderfinalize
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.
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.
[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.
Tags und Links objective-c ios core-data cocoa-touch nsmanagedobject