2009-12-31 117 views
1

我最近一直在問關於Obj-C循環緩衝區對象,假設這將是更好的方式來控制UITableView上的大量數據。
我發現了一個解決方案,只要循環緩衝區對象去,但我一直想知道可能更好,更快,更高效的內存解決方案:調用我的SQLite數據庫來更新UITableView。
以某種方式 - 內存將在更新UITableView之後釋放,並且不需要保存對象的引用,與保存常量NSMutableArray和所有內部對象相比,這將更有效並且節省內存它。
調用SQLite數據庫來更新UITableView

你會如何處理更新UITableView與大量的數據(50k對象),也存儲在SQLite數據庫?

在此先感謝, 〜Natanavra。

回答

3

您所描述的正是NSFetchedResultsController的設計目的,也是在iPhone上使用Core Data的巨大優勢之一。使用NSFetchedResultsController,您可以設置數據庫的獲取請求,以便在您的表視圖中顯示元素,並限制在任何給定時間加載的項目的批量大小。這大大減少了內存消耗和加載時間 (我已經看到特定示例中加載時間增加了8倍)。

NSFetchedResultsController被設計爲與UITableView集成。有關具體示例,我會參考Apple的示例代碼,例如CoreDataBooks之一,以及Marcus Zarra的Core Data book和Pragmatic Programmers的iPhone SDK Development book中的相應部分。這兩本書對核心概念都有很好的解釋。

+0

感謝您的回答; 前段時間我已經研究過CoreData,但是我的系統已經使用SQLite,我並不想改變我的應用程序的核心。 我想知道你對實現NSFetchedResultsController的相同函數有什麼看法,但是使用SQLite。 再次感謝您的回答。 – natanavra 2010-01-01 13:52:04

+0

我的建議是將現有的SQLite數據庫遷移到Core Data。我最近爲自己的應用程序完成了這種遷移,以便利用Core Data提供的設施。我的數據模型非常複雜,但爲其編寫遷移例程只花了幾天時間。與將數據庫移動到Core Data並使用它提供的內容相比,您將花費更多時間來實現自己的批處理抓取,緩存和內存管理過程。 – 2010-01-01 16:16:00

+0

我使用sqlcipher,所以我不能自己使用Core Data。我將自己解決這個問題,我想最後我們所討論的只是通過首先查詢所有對象的數量來查詢所需的對象,然後請求您需要的對象按需要將OFFSET設置爲indexPath.row。 – 2011-06-02 15:39:25