我有一个内存密集型的iOS应用程序,现在正在努力确保内存使用不会随着时间的推移而增加。我的应用程序有一个“主”上下文,它存在于应用程序的整个生命周期中,有时会为后台任务生成其他较小的上下文。
我注意到的一件事是,NSManagedObjects似乎长期注册在主上下文中,从DB中拉取对象与回收所有相关内存的唯一方法是调用[NSManagedObjectContext reset]
。
当然,这会导致内存使用量急剧下降,因为最近关闭的列表视图中的所有已注册对象都被正确地弹出了内存,但是这很烦人,因为您刚刚使该上下文中注册的每个对象都无效了,而您仍然拥有对其引用(即由仍然打开的视图引用的对象),现在需要重新从数据库中获取所有这些对象以避免访问无效对象时发生异常。
是否只有这种方式可以清除NSManagedObjectContext中已注册对象集,还是有更好的方式可成功弹出所有不再引用的已注册对象,但不会使所有仍活着的NSManagedObjects无效?
refreshObject:mergeChanges:
,当我在列表视图被销毁时调用它来刷新所有对象时,不幸的是它似乎没有太大的影响。我猜测行缓存正在消耗所有内存,除非有另一种清除行缓存的方法,否则我想我仍然需要使用reset
方法。真遗憾 :( - glenc