就核心数据而言,瞬态属性是“受管理属性”?核心数据是否也管理它的内存?或者我必须在-dealloc中手动释放?我认为不,因为我可能会选择不创建一个子类 - 但是当我有一个瞬态属性时,我想它是没有意义的,因为我需要一个子类来计算这个派生值---不然,或者不是??)我必须在-dealloc中释放瞬态属性吗?
1
A
回答
2
核心数据中的内存管理有点棘手。
如果您对瞬态属性没有做任何特殊处理,那么在大多数情况下,合成访问器将为您管理属性的对象生命周期。 (当Xcode从数据模型中为一个托管对象类生成源代码时,它不会为该属性的对象创建一个最终版本,如果它总是必要的话,那就太麻烦了)。不幸的是,你经常做一些特殊的事情一个瞬态属性,所以你需要释放它或任何其他在这个过程中创建的对象。
但是,您不会在dealloc中发布。 Apple文档强烈建议您永远不要修改NSManagedObject子类的init或dealloc。相反,要发布瞬态属性,您需要将发行版放在didTurnIntoFault
中。这是因为,当Core Data将对象转换为故障时,即使对象仍驻留在内存中并且存活,它也会清除其所有属性。
因为核心数据在幕后发生的事情非常多,所以在发送最终版本之前检查瞬态属性的对象不是零是非常重要的。
2
如果您的托管对象随时分配任何特殊的内容来支持您的瞬态属性,那么您应该在dealloc中释放它。基本上,发布你创建的任何东西。
+1
你在这里有一个重大的错误。使用托管对象,您不会在dealloc中释放,而是使用'didTurnIntoFault'。 – TechZen 2010-06-07 16:55:28
相关问题
- 1. 必须在dealloc中释放非指针实例变量吗?
- 2. 我应该在dealloc中释放实例变量和属性吗?
- 3. 我必须手动释放声明为保留的属性吗?
- 4. 我必须释放这个变量吗?
- 5. 非空属性引用瞬态值 - 瞬态的实例必须当前操作
- 6. 我必须在 - (void)viewDidUnload中释放IBOutlets吗?
- 7. 我应该在我的dealloc函数中释放IBOultet吗?
- 8. 我必须保留/释放从NSDictionary中取得的值吗?
- 9. 我必须在这里释放对象吗?
- 10. Swift UnsafeMutablePointer:我必须在释放之前调用deinitialize吗?
- 11. 我应该释放的dealloc
- 12. 非空属性引用瞬态值瞬态实例必须在当前操作之前保存
- 13. CoreData中的瞬态属性
- 14. 我们应该在dealloc方法中释放委托吗?
- 15. 我必须删除@Override注释吗?
- 16. 在dealloc和/或release上释放/释放对象吗?
- 17. CUDA - 我必须每次都分配和释放内存吗?
- 18. 使用vlfeat时,我必须明确释放内存吗?
- 19. 我应该在dealloc中放置我的活动指示符释放语句吗?
- 20. 我是否必须在read_triplet中释放doublet?我该怎么做?
- 21. 即使我们不拥有伊娃的(alloc/new/copy),我们是否必须在dealloc中释放伊娃?
- 22. 属性值必须在@Retryable
- 23. autorelease与释放dealloc
- 24. 是否有必要在dealloc中释放此对象?
- 25. 不能释放NSFetchedResultsController在dealloc
- 26. 在休眠中使用瞬态属性
- 27. 我必须在DbContext上创建显式的DbSet属性吗?
- 28. iOS:我应该释放dealloc函数中的对象吗?
- 29. CoreData:瞬态属性和localizedCaseInsensitiveCompare
- 30. 瞬态属性和FetchRequest?
因此,即使我会在-didTurnIntoFault中释放瞬态属性,我也必须检查if(transientProperty!= nil){[transientProperty release]}?但是:发送 - 释放到零不是一个问题,但....或是吗? – dontWatchMyProfile 2010-06-07 17:18:31
理论上不,在现实中,我发现核心数据中有一些奇怪的问题,检查nil似乎避免。你可能会忽略这一点。它更多的是我的腰带和吊带姿态。 – TechZen 2010-06-07 21:10:49