我有一个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