2012-06-27 100 views
1

這是我一直想問的問題。 當我在Profiler中尋找分配問題時運行iOS應用程序時,我發現NSManagedObject在使用和顯示後很長一段時間內保留在內存中,並且已撤銷分配的UIViewController。當然,當再次分配UIViewController時,數字不會增加,這表明沒有泄漏,並且CoreData有一些對象重用。CoreData和NSManagedObject內存狀態

如果我有已在實施「mobjc」作爲名稱的MyManagedObject類,那麼在探查我可以看到越來越多的:

MyManagedObject_mobjc_

的數量可以變化,並且對於少量數據,例如sqllite中的100個對象,它會增長到該限制並停留在那裏。

但似乎有時在應用程序生命週期中對象被釋放,所以我想CoreData本身正在做一些內存優化。 似乎並不是整個對象都被保留下來,而是因爲它的「錯誤」(請原諒我的英語:-)),因爲活字節的大小很小。 即使很多故障對象也會佔用內存。

但在這一點上,我想一些確認:

  • 是CoreData真正管理和內存優化的對象?
  • 有什麼我可以幫助我的應用程序保留儘可能少的對象嗎?
  • 與上述問題相關,我真的需要照顧這個問題嗎?
  • 你有一些鏈接,可能由蘋果公司,在這裏解釋這個特定的主題?

也許它是相關的,我用於測試的應用程序依賴於ARC和iOS 5.1。

感謝

回答

2

在你正在尋找這個SO話題,Core Data Memory Management,你可以找到的信息。

相反,這是鏈接到蘋果文檔Core Data Memory Managament

這裏有一些小技巧。

首先,當你處理核心數據時,你處理一個對象圖。爲了減少內存消耗(修剪您的圖),您可以對正在使用的上下文執行reset,或將對象轉換爲通過NOrefreshObject:(NSManagedObject *)object mergeChanges:(BOOL)flag方法的fauts。如果您將NO傳遞給該方法,則可能會丟失未保存的更改,請注意。

此外,如果您不需要它,請不要使用撤消管理。它增加了內存使用(在iOS中默認情況下,不創建撤消管理器)。

希望有所幫助。

相關問題