1

foo我在 NSManagedObject 子类中有一个对象 ivar bar,只要该对象存在,我就需要一直在那里。

为了确保foo正确创建,我将 awakeFromInsert 子类化为创建foobar创建。我在 awakeFromFetch 中做了同样的事情,以确保从商店中获取的时间foobar

为了解决这个问题,我foo在 willTurnIntoFault 和 prepareForDeletion 中释放。

然而,事实证明,当我删除时bar,prepareForDeletion 和 willTurnIntoFault 都被调用,释放foo两次。

我意识到我可能不能在 prepareForDeletion 中释放它,但我想知道这里的最佳实践是什么,所以我明白什么时候会变成错误等等。对于普通对象,我只是创建foo在 init 中并在 dealloc 中销毁它。

谢谢!

4

1 回答 1

2

不要仅仅释放 ivar,而是释放它并将其设置为nil. 释放nil没有效果,所以如果它发生两次就可以了。

更好的是,创建foo一个具有retain语义的属性并始终通过-setFoo:.

于 2010-11-03T23:12:40.453 回答