iphone - cocoa touch : When does an NSFetchedResultsController become necessary to manage a Core Data fetch?

标签 iphone cocoa-touch memory-management core-data

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

我想知道的是在使用 NSFetchedResultsController 来处理请求之前我可以获取多少对象的粗略想法。在核心数据文档中,它说 SQLite 存储认为“10,000 个对象是一个相当小的数据集”,但在 NSFetchedResultsController 的文档中,它提到一次在内存中保留“数十个对象”。

我主要处理最多 50 个对象的数据集,每个对象可能有十几个 NSNumber 和 NSString 实例,以及下一组对象的一对多关系(即有 20 个实例)对象 A 的每个实例都与对象 B 的一组 30 个(不同的)实例具有一对多关系,其中每个实例...)。

这种情况是否适合使用 NSFetchedResultsController,或者我可以使用简单的 NSArray 结果吗?我自己对管理 Controller 的细节没有问题(获取 UITableView 索引路径的对象的便捷方法,将新对象添加回上下文等),我只是想知道每种方法。

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

最佳答案

NSFetchedResultsController 是一个非常方便的帮助器类,用于将 Core Data 与 UITableView 连接。我的建议是在每个有核心数据支持的 TableView 中使用它。在我使用它的每种情况下,它都显着减少了我必须编写的代码量。

在性能方面,它也可以带来巨大的改进。如果您将 -setFetchBatchSize: 与输入到 NSFetchedResultsController 中的 NSFetchRequest 一起使用,而不是提取整个数据集,则可以进行批量提取,其中仅提取 TableView 中显示的相关数据。不再显示的数据也可以自动从内存中删除(或者我的理解是这样)。

对于具有中等到大型数据集的表,这可以带来显着的性能提升。据苹果工程师称,对于 10,000 个项目的数据库,这可以将启动时间减少 80% 以上,并将内存使用量减少 50%。

关于iphone - cocoa touch : When does an NSFetchedResultsController become necessary to manage a Core Data fetch?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1263723/

相关文章:

ios - 使用 Google map iOS sdk 获取人类可读的地址

iphone - 将 plist 转换为 CSV 文件?

iphone - 如何在 iOS 编程中使用 pList

ios - 如何创建居中对齐的 Nsstring

ios - 如何使用 addObserver 闭包方法在 Swift 5 中删除Observer

iphone - 没有 iPhone 是否可以为 iPhone 进行开发?

iphone - 使用 NSURLConnection 和 NSURLProtectionSpace 确定信任

iphone - 控制帧速率或限制 AVCaptureVideoPreviewLayer

C++指针树模板问题

c - 内存映射显示的 RAM 多于物理可用的 RAM