我的视图控制器中有一个方法'books',它可以获取核心数据中的所有书籍并返回它们的数组。我经常依赖自己的书 - 当我需要知道它在某个索引上的书,有多少本书等时,书籍方法会重新获取结果。
通过在iVar中缓存这些结果,我可以获得任何性能提升吗?绝大多数时候我都知道self.books的结果不会改变(objectAtIndex,count等)。我可以添加第二个布尔值iVar'booksNeedRefresh'作为脏标志,并且只有在我添加/删除书籍时才将其设置为true。然后self.books可以检查此标志,并在必要时重新获取。
我想我的问题是:
答案 0 :(得分:2)
我认为你走错了路。核心数据已经为您提供了大量的内存管理,因此不需要"脏"旗帜等。
最明显的解决方案是使用NSFetchedResultsController
。它的主要目的是在保持内存占用小的同时在表格视图中显示数据 - 但它也可以用于其他目的。您的books数组将变为_fetchedResultsController.fetchedObjects
,FRC将负责内存和提取之间的优化。
原则上回答你的问题,上面的权衡就是问题所在,所以你在思考这个问题时是正确的。频繁提取确实会影响性能。