2010-06-07 38 views
1

就核心數據而言,瞬態屬性是「受管理屬性」?核心數據是否也管理它的內存?或者我必須在-dealloc中手動釋放?我認爲不,因爲我可能會選擇不創建一個子類 - 但是當我有一個瞬態屬性時,我想它是沒有意義的,因爲我需要一個子類來計算這個派生值---不然,或者不是??)我必須在-dealloc中釋放瞬態屬性嗎?

回答

2

核心數據中的內存管理有點棘手。

如果您對瞬態屬性沒有做任何特殊處理,那麼在大多數情況下,合成訪問器將爲您管理屬性的對象生命週期。 (當Xcode從數據模型中爲一個託管對象類生成源代碼時,它不會爲該屬性的對象創建一個最終版本,如果它總是必要的話,那就太麻煩了)。不幸的是,你經常做一些特殊的事情一個瞬態屬性,所以你需要釋放它或任何其他在這個過程中創建的對象。

但是,您不會在dealloc中發佈。 Apple文檔強烈建議您永遠不要修改NSManagedObject子類的init或dealloc。相反,要發佈瞬態屬性,您需要將發行版放在didTurnIntoFault中。這是因爲,當Core Data將對象轉換爲故障時,即使對象仍駐留在內存中並且存活,它也會清除其所有屬性。

因爲核心數據在幕後發生的事情非常多,所以在發送最終版本之前檢查瞬態屬性的對象不是零是非常重要的。

+0

因此,即使我會在-didTurnIntoFault中釋放瞬態屬性,我也必須檢查if(transientProperty!= nil){[transientProperty release]}?但是:發送 - 釋放到零不是一個問題,但....或是嗎? – dontWatchMyProfile 2010-06-07 17:18:31

+0

理論上不,在現實中,我發現核心數據中有一些奇怪的問題,檢查nil似乎避免。你可能會忽略這一點。它更多的是我的腰帶和吊帶姿態。 – TechZen 2010-06-07 21:10:49

2

如果您的託管對象隨時分配任何特殊的內容來支持您的瞬態屬性,那麼您應該在dealloc中釋放它。基本上,發佈你創建的任何東西。

+1

你在這裏有一個重大的錯誤。使用託管對象,您不會在dealloc中釋放,而是使用'didTurnIntoFault'。 – TechZen 2010-06-07 16:55:28

相關問題