0

我的视图控制器中有一个方法'books',它获取核心数据中的所有书籍并返回它们的数组。我经常依赖 self.books - 当我需要知道它在某个索引处是哪本书、有多少本书等时,books 方法会重新获取结果。

我会通过将这些结果缓存在 iVar 中来获得任何性能改进吗?绝大多数时候我都知道 self.books 的结果不会改变(objectAtIndex、count 等)。我可以添加第二个布尔 iVar 'booksNeedRefresh' 来充当脏标志,并且仅当我添加/删除一本书时才将其设置为 true。然后 self.books 可以检查此标志并仅在必要时重新获取。

我想我的问题是:

  1. 来自核心数据的每个获取请求是否都会带来不可忽略的性能影响?
  2. 缓存 + 脏标志是一个明智的解决方案吗?
4

1 回答 1

2

我认为你走错了路。Core Data 已经为您提供了大量的内存管理,因此不需要“脏”标志等。

最明显的解决方案是使用NSFetchedResultsController. 它的主要目的是在表格视图中显示数据,同时保持较小的内存占用——但它也可以用于其他目的。您的 books 数组将变为_fetchedResultsController.fetchedObjects,FRC 将负责内存和提取之间的优化。

原则上回答您的问题,上述权衡正是问题所在,因此您对此的思考是正确的。频繁提取确实会影响性能。

于 2012-08-18T06:03:51.860 回答