就核心數據而言,瞬態屬性是「受管理屬性」?核心數據是否也管理它的內存?或者我必須在-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