2011-07-15 82 views
13

我正在使用NSFetchedResultsController處理UITableView,一切正常,我發現它非常強大,尤其是與結果委託一起使用。 爲了深入瞭解表格,我重複使用了相同的控制器類,它通過單擊單元格行實例化參數,然後將控制器推送到UINavigationController,並使用NSFetchedResultsController構建另一個表視圖。正確使用NSFetchedResultsController緩存

此時,每個控制器都有自己的緩存,並且緩存名稱由唯一標識符[NSString stringWithFormat「cacheName _%@」,uniqueStringForCell]派生,最後我顯然可以擁有多個緩存。

現在的問題。

1)有很多緩存可以是一個問題?

2)我們什麼時候應該使用緩存?

3)在deleteCacheWithName的情況下,放置這種方法的最佳位置在哪裏?我已經在viewWillDisappear中嘗試過了,但對於這種情況,我認爲當視圖再次出現並且緩存不再存在時(例如與UINavigationController一起使用時)可能會出現問題。可能dealloc方法是最好的地方?

4)緩存和內存管理之間有什麼關係?我的意思是,當發送(void)didReceiveMemoryWarning時,是否需要刪除緩存?如果是的話,那麼重建它又如何呢?什麼是首選方式,也許重新發布取回?

5)fetch控制器的代理設置爲UITableViewController(fetchController.delegate = self),是否有任何問題?從某種意義上說,如果發生變化,會有多個控制器發出警報?並且deleteCacheWithName也刪除委託?

感謝

回答

11

要回答(一些)您的問題:

1)擁有多個高速緩存是沒有問題的。事實上,從蘋果的類引用:

  • 如果您有不同的 配置的多個讀取的結果控制器(不同的排序描述符等等),你必須給每個 不同的緩存名稱。

我已經在那裏我沒有這樣做只是爲了讓我浪費時間試圖解決的異常與以前的應用程序的問題。

2)我們應該使用緩存來存儲NSFetchedResultsController需要做的任何重複的工作。任何時候節或訂購信息發生更改時,緩存都會更新。同樣,如果緩存與數據庫中的當前信息不一致(您添加了新行,刪除等),則控制器釋放緩存並將其清除。

3)我親自把deleteCacheWithName放在viewDidUnload方法中。不知道這是不是最好的地方。

不確定約4.在重建緩存方面 - 如果當前緩存與應用不同步,這應該會自動發生。我沒有做任何具體的內存管理和我的任何應用程序緩存。

5)這應該不成問題。再次,從蘋果公司的文檔:

  • 如果爲獲取結果控制器設定的委託,在 控制器註冊從其管理 對象上下文收到變更通知。處理影響結果集 或節信息的上下文中的任何更改都會被處理,並且結果會相應地更新爲 。當結果對象 更改位置或修改部分時,控制器通知代理(請參閱 NSFetchedResultsControllerDelegate)。您通常使用這些方法 來更新表格視圖的顯示。

僅供參考,這裏是鏈接到蘋果開發文檔該類:http://developer.apple.com/library/ios/#documentation/CoreData/Reference/NSFetchedResultsController_Class/Reference/Reference.html

HTH