我是否必须在-dealloc中释放瞬态属性?

时间:2010-06-07 15:54:40

标签: iphone core-data

就核心数据而言,瞬态属性是“托管属性”吗? Core Data也管理它的内存吗?或者我必须在-dealloc中手动发布吗?

(我认为不,因为我可能选择不创建子类 - 但我想当我有一个瞬态属性时没有意义,因为我需要一个子类来计算派生值 - 或者不是? ?)

2 个答案:

答案 0 :(得分:2)

如果您的托管对象随时分配任何特殊内容以支持您的瞬态属性,那么您应该在dealloc中释放它。基本上,释放您创建的任何内容。

答案 1 :(得分:2)

核心数据中的内存管理有点棘手。

如果您没有对transient属性做任何特殊操作,那么在大多数情况下,合成访问器将为您管理属性的对象生命周期。 (当Xcode从数据模型生成托管对象类的源代码时,它不会为该属性的对象创建最终版本。如果它始终是必要的话。它很遗憾,你经常做一些特别的事情。瞬态属性,因此您需要释放它或在该过程中创建的任何其他对象。

但是,你没有以dealloc发布。 Apple文档强烈建议您永远不要修改NSManagedObject子类的init或dealloc。相反,要释放瞬态属性,您需要将该版本放在didTurnIntoFault中。原因是当Core Data将对象转换为错误时,即使对象仍然驻留在内存中并且处于活动状态,它也会清除其所有属性。

因为在Core Data的幕后发生了很多事情,所以在发送最终版本之前检查transient属性的对象是不是nil是非常重要的。