2010-11-09 44 views
0

我正在使用核心數據。從那裏我檢索10000+以上的數據內存管理導致的崩潰問題(使用核心數據)

使用NSOperation,我在UITableView上顯示大量數據。

,但我可以在XCode的儀器看到我的內存使用量不斷增加

這就是原因,轟然活動中有沒有設備模擬器中

任何一個想對此發表評論?

+0

獲取錯誤:數據格式化程序暫時不可用,將在「繼續」後重新嘗試。 (未知錯誤加載共享庫「/Developer/usr/lib/libXcodeDebuggerSupport.dylib」 – Tariq 2010-11-09 12:07:07

回答

1

不要一次檢索10000個對象。

使用NSAutoreleasePool並按一定的時間間隔(通過測試確定間隔)刷新池。

每N次迭代:

  1. 節省您的上下文
  2. 重置您的上下文
  3. 消耗你的池

這將導入期間保持你的內存使用率下降。

+0

Marcus,我認爲一次導入如此多的數據並不是一個好主意,即使他能夠在您的建議中成功運行這樣的導入,他最終會在內存中創建超過10000個對象 - 所有那些僅僅用於table-view的東西都是矯枉過正的,我也不確定他的描述是否真的是他在做的 - 我知道在他使用應用程序時內存使用量在增加 - 這意味着他將數據加載到tableView中datasource按要求,這將是一個正確的方法,我猜。 – Michal 2010-11-09 17:17:34

+0

如果它正在加載到數據源,那麼他沒有使用'NSFetchedResultsController';因此我假設它是一個impo rt問題。 – 2010-11-09 20:34:12

+0

@Marcus:我正在使用NSFetchedResultsController。 NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init]; //根據需要編輯實體名稱。 [fetchRequest setEntity:[me entity]]; //將批量大小設置爲合適的數字。 // TODO:確定什麼樣的批量大小是合適的,或者我們應該批量加工 [fetchRequest setFetchBatchSize:50]; //嘗試使用0以及 ....................... – Tariq 2010-11-10 05:35:36

0

模擬器具有幾乎無限的內存,因爲它使用Mac的內存,因此可以交換到硬盤驅動器。另一方面,iDevice的內存非常有限。

從您的描述中不清楚你做錯了什麼。由你來分析它,你已經在很好的方式上使用儀器。使用儀器的「Heapshot分析」來查找您的應用程序泄漏內存的位置。最近bbum寫了一篇關於如何使用它的好文章:http://www.friday.com/bbum/2010/10/17/when-is-a-leak-not-a-leak-using-heapshot-analysis-to-find-undesirable-memory-growth/。還有一個由蘋果工程師提供的有關使用樂器值得關注的WWDC視頻:http://developer.apple.com/videos/wwdc/2010/

+0

我收到錯誤 - >數據格式化程序暫時不可用,將在「繼續」後重新嘗試(加載共享庫時出現未知錯誤)/ Developer/usr/lib/libXcodeDebuggerSupport.dylib「 – Tariq 2010-11-09 12:06:22