我创建了一个使用核心数据的程序,它运行良好。
从那以后,我试图将我所有的核心数据方法调用和获取例程移动到一个自包含的类中。然后,我的主程序实例化该类并对该类进行一些基本的方法调用,然后该类在幕后处理所有核心数据。我遇到的是,有时我会发现当我从上下文中获取一个托管对象时,我将拥有一个有效的对象,但它的属性已被释放,我会导致崩溃。我玩过僵尸并寻找内存泄漏,我收集到的似乎是运行循环可能负责释放内存,但我不确定。
有没有办法确定该内存是否已被释放并在我需要访问它时强制核心数据取回它?我的 managedObjectContext 永远不会被释放,而 fetchedResultsController 也永远不会。
我想也许我需要使用 [managedObjectContext refreshObject:mergeData:] 方法或 [managedObjectContext setRetainsRegisteredObjects:] 方法。虽然,我的印象是最后一个可能不是最好的选择,因为它会占用更多的内存(据我所知)。
这些错误仅在我将核心数据调用移动到另一个类文件时才出现,并且它们出现时是随机的。
任何见解将不胜感激。
-瑞安