gpt4 book ai didi

objective-c - 正确使用 NSFetchedResultsController 缓存

转载 作者:太空狗 更新时间:2023-10-30 03:19:12 24 4
gpt4 key购买 nike

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

至此,每个 Controller 都有自己的缓存,缓存名称由唯一标识符[NSString stringWithFormat"cacheName_%@",uniqueStringForCell]导出,最后我显然可以有很多缓存。

现在是问题。

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

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

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

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

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

谢谢

最佳答案

回答(一些)您的问题:

1) 拥有多个缓存不是问题。其实从苹果的类引用:

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

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

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

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

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

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

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

仅供引用,这是指向此类的苹果开发文档的链接:http://developer.apple.com/library/ios/#documentation/CoreData/Reference/NSFetchedResultsController_Class/Reference/Reference.html

HTH

关于objective-c - 正确使用 NSFetchedResultsController 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6705265/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com