我在其中一個應用程序中廣泛使用核心數據。通常,對於UITableView,我使用NSFetchedResultsController。但是在一個特定的視圖控制器中,我需要顯示一些數據的總和 - 要求我首先獲取數據,然後創建一個for循環來分析數據並進行計算。但是,我認爲,如果我獲取大量的數據(比如說,每個包含NSString和float的10.000個對象),並且創建一個for循環,它可能會導致我的應用程序崩潰。這是一個嚴重的風險嗎?如果有,我該如何解決它? (我想創建一個NSAutoReleasePool,在計算後添加和釋放每個對象,但我使用ARC,所以我認爲我不能)。從核心數據中獲取大數據後的週期風險
回答
使用自動釋放池在一個循環中這樣...
@autoreleasepool {
// Insert code in here
}
此外,你應該確保retainsRegisteredObjects
是NO在你管理的對象上下文。此外,如果真的開始使用太多,可以通過釋放它們來手動控制故障refreshObject:mergeChanges:
我認爲你應該沒問題,你的建議循環。
通過設置獲取請求的batchSize
,您可以指示Core Data始終獲取謹慎的數據量。核心數據然後會執行增量提取併爲您管理內存管理。
如果他想迭代10000個對象,那麼你是怎麼做到的? @Mundi,即使是一個示例代碼的鏈接,這也是很有趣的。 – 2012-08-16 23:36:59
@DavidH這很簡單。 'for(id obj in fetchedResults){}'。 – Mundi 2012-08-17 15:02:14
我的觀點是,如果他一次讀入多個對象,由於沒有中間自動釋放池刷新,可能會佔用大量內存。 – 2012-08-17 18:08:15
您不需要從核心數據實體中獲取所有屬性,以執行所嘗試的複雜計算存檔。只需在你的NSFetchRequest上使用setPropertiesToFetch:這將允許你只提取你需要的屬性。此外,使用setBatchSize作爲您的獲取請求來告訴核心數據錯誤的對象以保持較低的佔用空間。
- 1. 核心數據從本週獲取數據
- 2. 從核心數據中提取日期
- 3. iPhone - 核心數據中獲取數據
- 4. 保留週期與核心數據
- 5. 核心數據和保留週期
- 6. 從核心數據中獲取主鍵
- 7. 在後臺獲取核心數據
- 8. 從核心數據獲取日期,然後獲取並顯示在tableViewCell中
- 9. 如何從PickerView中的核心數據中獲取數據? iOS
- 10. 無法從我的核心數據庫中獲取數據
- 11. 如何過濾從核心數據中獲取的數據?
- 12. 從核心數據獲取圖像
- 13. 如何獲取核心數據數據庫的最後記錄?
- 14. 核心數據數據庫值生命週期
- 15. 如何從核心數據中順序獲取數據?
- 16. 在從核心數據加載數據中獲取特定值?
- 17. 從核心數據關係中獲取最大值
- 18. 從核心數據中載入日期
- 19. 從核心數據庫中獲取最後一次記錄
- 20. 從週期服務器獲取數據
- 21. 核心數據:取
- 22. 無法從核心數據獲取的數據文件
- 23. 從核心數據獲取最後插入的項目,iOS
- 24. 從核心數據
- 25. 從核心數據
- 26. 獲取從核心數據對象與10個日期最快
- 27. 核心數據:從類別中取數據(核心類的擴展名)
- 28. 從核心數據獲取一些數據
- 29. 如何從核心數據庫獲取數據
- 30. 沒有從核心數據獲取數據
顯然取決於你的情況,但如果你需要一個簡單的SUM屬性,你可能想要做一個更具體的獲取,如這裏解釋http://stackoverflow.com/questions/6889646/calculating-a-simple-sum- with-core-data – 2012-08-16 15:27:52
@PeterPajchl感謝您的回覆,但計算並不簡單=( – 2012-08-16 15:36:14
在附註中,您仍然可以使用AutoReleasePools與ARC,它只是有點不同(搜索@autoreleasepool) – 2012-08-16 15:53:05