3

在我的代码中,我大量导入了数千个对象并save在每个对象之后执行。

我是否需要在保存每个对象后将其变为故障以节省内存,还是 Core Data 会自动将其变为故障?不幸的是,我在Apple 的文档中没有找到任何线索。

谢谢!

4

2 回答 2

4

A. 您可以使用refreshObject:mergeChanges: (NSManagedObject)将对象变成故障。这将放弃对相关对象的强引用,以便可以释放它们。(如果它们没有被另一个参考持有。)

您可以使用 refreshObject:mergeChanges: 方法将已实现的对象变为故障。如果您将 NO 作为 mergeChanges 参数传递,则必须确保该对象的关系没有更改。如果有,然后您保存上下文,您将向持久存储引入参照完整性问题。(链接

B.正如 Daniel G 所说,您可以使用-reset (NSManagedObjectContext)清除所有对象。但这确实消除了对象,引用可能会中断。

C. 我认为,CD 没有承诺将所有保存的对象变成故障。(未保存的对象不能变成故障。)但只需覆盖-didTurnIntoFault (NSManagedObject)即可查看 CD 的行为。

于 2013-09-11T20:27:26.593 回答
1

我不确定你在问什么,但如果你的上下文中有很多对象,你总是可以使用方法 -[NSManagedObjectContext reset] 来重置上下文并清除内存。如果您在最近重置的上下文中有任何引用 NSManagedObjects 的对象,您也不想这样做。

我不确定您的应用程序的性质或您为什么需要对数千个对象执行保存,看来您应该考虑使用批处理来获取请求。这样,核心数据将保证在任何给定时间只有指定数量的对象将存在于上下文中。

我希望这有帮助?

于 2013-09-11T19:00:43.997 回答