Iphone Cocoa Touch:何时需要NSFetchedResultsController来管理核心数据获取?

Iphone Cocoa Touch:何时需要NSFetchedResultsController来管理核心数据获取?,iphone,cocoa-touch,memory-management,core-data,Iphone,Cocoa Touch,Memory Management,Core Data,我正在开发一个iPhone应用程序,该应用程序大量使用核心数据,主要用于其类似数据库的功能(例如,在获取请求上设置排序顺序或谓词的功能)。我正在展示我在各种UITableViewController中获取的所有数据 我想知道的是,在使用NSFetchedResultsController处理请求成为一个好主意之前,我可以获取多少对象。在核心数据文档中,SQLite商店认为“10000个对象是一个相当小的数据集”,但是在NSFDCHEDRESULTS控制器的文档中,它一次将“数十个对象”保存在内存

我正在开发一个iPhone应用程序,该应用程序大量使用核心数据,主要用于其类似数据库的功能(例如,在获取请求上设置排序顺序或谓词的功能)。我正在展示我在各种UITableViewController中获取的所有数据

我想知道的是,在使用NSFetchedResultsController处理请求成为一个好主意之前,我可以获取多少对象。在核心数据文档中,SQLite商店认为“10000个对象是一个相当小的数据集”,但是在NSFDCHEDRESULTS控制器的文档中,它一次将“数十个对象”保存在内存中。 我主要处理多达50个对象的数据集,每个对象可能有12个NSNumber和NSString实例,以及下一组对象的一对多关系(即,有20个对象a实例,每个实例与一组30个对象(不同的)有一对多关系)对象B的实例,每个实例

这个场景是否适合使用NSFetchedResultsController,或者我可以通过简单的NSArray结果逃脱?我自己在管理控制器的细节(为UITableView索引路径获取对象的方便方法、将新对象添加回上下文等)方面没有问题,我只是想知道每种方法的内存使用情况


我应该提到,该应用程序将主要面向iPhone 3G(而不是S)和第一代iPod Touch用户,因此请记住这些平台的有限内存。

NSFetchedResultsController是一个非常方便的帮助类,用于将核心数据与UITableView连接。我的建议是将它用于具有核心数据支持的每个表视图。在我使用过的每一种情况下,它都大大减少了我必须编写的代码量

就性能而言,它也可以带来巨大的改进。如果使用-setFetchBatchSize:将NSFetchRequest馈送到NSFetchedResultsController中,则可以在只获取表视图中显示的相关数据的情况下执行批处理获取,而不是在整个数据集中进行获取。不再显示的数据也可以自动从内存中删除(我的理解也是如此)


对于具有中到大型数据集的表,这可以带来显著的性能优势。有人引用苹果公司工程师的话说,对于一个10000项的数据库,这可以减少80%以上的启动时间和50%的内存使用量。

我支持这一点,但推荐的还不够。我正在用CoreData重新编写我的应用程序,我已经看到使用FetchedResultsController获得了巨大的收益。不过我个人在使用fetchResultsController加载数据集时遇到了问题,目前不会对此进行担保。在分页时,它似乎不清楚它是否正确地获取了对象,并且似乎在加载对象时死死地抓住了所有对象。