【问题标题】:Correctly use of NSFetchedResultsController cache正确使用 NSFetchedResultsController 缓存
【发布时间】:2011-10-06 00:34:19
【问题描述】:

我正在使用 NSFetchedResultsController 来处理 UITableView,一切正常,我发现它非常强大,尤其是与结果委托结合使用时。 为了向下钻取表格,我重用了相同的控制器类,通过单击单元格行使用参数进行实例化,然后将控制器推送到 UINavigationController 并构建另一个表视图,再次使用 NSFetchedResultsController。

此时,每个控制器都有自己的缓存,并且缓存名称由唯一标识符[NSString stringWithFormat"cacheName_%@",uniqueStringForCell]导出,最终我显然可以拥有很多缓存。

现在是问题。

1) 有很多缓存可能是个问题?

2) 我们什么时候应该使用缓存?

3) 在 deleteCacheWithName 的情况下,放置这种方法的最佳位置在哪里?我已经在 viewWillDisappear 中尝试过,但是我想当视图再次出现并且缓存不再存在时,例如与 UINavigationController 一起使用时,我可能会遇到问题。可能dealloc方法是最好的地方?

4) 缓存和内存管理之间有什么关系?我的意思是,当发送 (void)didReceiveMemoryWarning 时,我需要删除缓存吗?如果是,那么再次重建它呢?首选方式是什么,也许重新发出 fetch ?

5) 提取控制器的委托设置为 UITableViewController (fetchController.delegate=self),这有什么问题吗?从某种意义上说,如果发生变化,不止一个控制器会收到警报?并且 deleteCacheWithName 是否也删除了委托?

谢谢

【问题讨论】:

    标签: objective-c uitableview nsfetchedresultscontroller


    【解决方案1】:

    回答(一些)你的问题:

    1) 拥有多个缓存不是问题。其实来自苹果的类参考:

    • 如果您有多个提取结果控制器具有不同的 配置(不同的排序描述符等),你必须给 每个都有不同的缓存名称。

    我在以前的应用程序中遇到过问题,我没有这样做只是为了得到一个我浪费时间试图解决的异常。

    2) 我们应该使用缓存来存储 NSFetchedResultsController 需要做的任何重复工作。每当部分或订购信息发生变化时,缓存都会更新。同样,如果缓存与数据库中的当前信息不一致(您添加了新行、删除了等),则控制器会释放缓存并清除它。

    3) 我个人将 deleteCacheWithName 放在 viewDidUnload 方法中。不确定这是否是最好的地方。

    不确定 4. 在重建缓存方面 - 如果当前缓存与应用程序不同步,这应该会自动发生。我没有对我的任何应用程序的内存管理和缓存做任何特定的事情。

    5) 这应该不是问题。同样,来自 Apple 的文档:

    • 如果为获取的结果控制器设置委托,则 控制器注册以接收来自其托管的更改通知 对象上下文。影响结果集的上下文中的任何更改 或部分信息被处理并更新结果 因此。控制器在结果对象时通知委托 更改位置或修改部分时(请参阅 NSFetchedResultsControllerDelegate)。您通常使用这些方法 更新表格视图的显示。

    仅供参考,这里是该课程的苹果开发文档的链接:http://developer.apple.com/library/ios/#documentation/CoreData/Reference/NSFetchedResultsController_Class/Reference/Reference.html

    HTH

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-01
      • 2013-11-20
      • 2013-12-29
      • 2011-02-12
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      相关资源
      最近更新 更多