我有一個NSManagedObject子類bar
內的對象ivar foo
,我需要在任何時候都在那裏,只要對象存在。NSManagedObject初始化/ dealloc等效
爲了確保foo
已正確創建,我已創建bar
子類型awakeFromInsert以創建foo
。我在awakeFromFetch中做了同樣的事情,以確保foo
在bar
被從商店中提取出來。
爲了解決這個問題,我在willTurnIntoFault和prepareForDeletion中釋放foo
。
但是,事實證明,當我刪除bar
時,prepareForDeletion和willTurnIntoFault都被調用,釋放foo
兩次。我知道我可能不會在prepareForDeletion中釋放它,但我想知道最佳實踐在這裏,所以我明白什麼時候某些東西變成了故障等等。對於一個普通對象,我在init中創建foo
並在dealloc中銷燬它。
謝謝!
我瞭解第一部分,但是將它作爲財產與保留有什麼關係呢?或者你的意思是self.foo =零,因爲那會自動釋放伊娃? – Christoph 2010-11-04 03:23:42
是的,如果foo被聲明爲「@property(readwrite,retain)」並在你的類的@implementation中合成,那麼[self setFoo:nil]和self.foo = nil都會釋放它。 (另外,將其設置爲新值將釋放舊值。)這是一個很好的習慣,因爲您a)不會忘記釋放ivars,並且b)如果發送消息時不會崩潰事後發佈ivar(因爲它將是零)。 – dwineman 2010-11-04 08:10:24
對,沒關係。所以在init中(通常不是這種情況下),我只是爲foo創建一個本地對象,做self.foo = whatever,然後[無論發佈],對吧? – Christoph 2010-11-05 16:35:36