我正在使用NSFetchedResultsController处理UITableView,一切正常,我发现它非常强大,特别是与结果委托相结合。 为了向下钻取表格,我正在重复使用相同的控制器类,通过单击单元格行来获取参数,然后将控制器推送到UINavigationController并再次使用NSFetchedResultsController构建另一个表视图。
此时,每个控制器都有自己的缓存,缓存名称是使用唯一标识符[NSString stringWithFormat“cacheName _%@”,uniqueStringForCell]派生的,最后我显然可以有很多缓存。
现在问题。
1)有很多缓存可能有问题吗?
2)我们什么时候应该使用缓存?
3)在deleteCacheWithName的情况下,放置此类方法的最佳位置在哪里?我已经尝试过viewWillDisappear,但是有了这个,我认为当视图再次出现并且缓存不再存在时,例如当使用UINavigationController时,我会遇到问题。 dealloc方法可能是最好的地方吗?
4)缓存和内存管理之间的关系是什么?我的意思是,当发送(void)didReceiveMemoryWarning时,我是否需要删除缓存?如果是的话,那又重建一次呢?什么是首选方式,也许重新发出提取?
5)fetch控制器的委托设置为UITableViewController(fetchController.delegate = self),有什么问题吗?从某种意义上说,如果发生变化,会提醒多个控制器? deleteCacheWithName也会删除委托吗?
感谢
答案 0 :(得分:11)
回答(一些)你的问题:
1)拥有多个缓存不是问题。事实上,从Apple的课程参考:
我之前的应用程序遇到了问题,我没有这样做,只是为了得到一个我浪费时间试图解决的例外。
2)我们应该使用缓存来存储NSFetchedResultsController需要做的任何重复工作。无论何时更改部分或订购信息,都会更新缓存。同样,如果缓存与数据库中的当前信息不一致(您添加了新行,已删除等),则控制器会释放缓存并将其清除。
3)我个人将deleteCacheWithName放在viewDidUnload方法中。不知道这是不是最好的地方。
不确定4.在重建缓存方面 - 如果当前缓存与应用程序不同步,这应该会自动发生。我没有对我的任何应用程序的内存管理和缓存做任何具体的事情。
5)这应该不是问题。再次,从Apple的文档:
仅供参考,以下是本课程的苹果开发者文档的链接:http://developer.apple.com/library/ios/#documentation/CoreData/Reference/NSFetchedResultsController_Class/Reference/Reference.html
HTH