2010-07-13 83 views
0

只是想確保我正在做的與Core Data的內存管理正確的事情。核心數據內存管理

在我的視圖控制器(這是標籤欄視圖)viewDidLoad我用NSFetchRequest來檢索我需要的行。然後我保留返回的NSArray對象,因爲我需要等待用戶交互來顯示這部分數據。在viewDidUnload我釋放該數組。

我擔心的是數據何時會變得更多,這種機制會效率低下嗎?無論如何,我只是使用它的一部分,但如果用戶傳遞所有數據,則需要全部提取。

回答

0

雖然你可能想看看NSFetchedResultsController這個解決方案很好,因爲它會爲你做很多繁重的工作。

否則你很好,內存是爲你處理的。當你進行一次抓取時,你會得到骨架對象(讀取少量內存直到單獨訪問),如果它們沒有被使用一段時間,它們可以變回骨架。這意味着Core Data將爲您執行大部分內存管理。只要你堅持你的陣列,你就是金。

1

您的問題的答案完全取決於您的模型的結構以及您提取的對象數量。不受約束的對象非常小,但沒有對象更好。如果你想聰明,你可以限制你的抓取大小,並根據需要在範圍內引入對象。這就是NSFetchedResultsController所做的。

話雖如此,我不明白爲什麼你需要獲取一個潛在的大型數據集並在標籤欄視圖中保留它,最多可以有六個按鈕同時顯示,如果你有一個定製頁面有多少標籤可以實際投入它之前,用戶難以滾動瀏覽它?可能有二十多個,你將遇到UI問題,甚至在像iPhone這樣的設備上也不是很大的內存。

+0

對不起,誤導。我不是將這些數據填充到標籤欄中,而是將其中一個標籤欄控制器視圖,實際上是滾動視圖。滾動視圖中的每個頁面都代表一條記錄。用戶可以滾動到幾個項目或整個數據庫。 – Pablo 2010-07-14 02:23:19

+1

這仍然沒有給我任何你談論的範圍。如果整個數據庫大約有100條記錄,那麼它就無關緊要了,如果它是〜1,000,000條那麼它就是這樣。如果它確實重要,那麼我建議你爲你的提取請求選擇一個合理的批處理大小,並且每次提取的固定數量的對象出錯。如果用戶滾動到超出對象的範圍,那麼您將執行新的限制。檢出'fetchOffset','fetchLimit'。和NSFetchRquest的fetchBatchSize屬性。 – 2010-07-15 04:13:15