我在NSManagedObject子类foo
中有一个对象ivar bar
,只要该对象存在,我就必须始终在那里。
为了确保正确创建foo
,我创建了foo
时创建bar
的子类,以创建foo
。我在awakeFromFetch中也做了同样的事情,以确保从商店中提取bar
时foo
存在。
为了抵消这一点,我在willTurnIntoFault和prepareForDeletion中释放bar
。
然而,事实证明,当我删除foo
时,调用prepareForDeletion然后调用willTurnIntoFault,释放foo
两次。
我意识到我可能不会在prepareForDeletion中释放它,但我想知道最佳实践是什么,所以我理解什么时候会变成一个错误,等等。对于一个普通的对象,我' d只需在init中创建{{1}}并在dealloc中销毁它。
谢谢!
答案 0 :(得分:2)
不要只释放ivar,而是释放它并将其设置为nil
。释放nil
无效,因此如果它发生两次你就会好起来。
更好的是,使foo
具有retain
语义的属性,并始终通过-setFoo:
进行设置。