我仍在学习通过iOS开发和使用Core Data的方式,并且刚刚经历了保留周期。
通过阅读《核心数据编程指南》,我的理解是,在处理完关系后,可以使用托管对象上下文方法refreshObject:mergeChanges
来确保保留周期被打破。
因此,可以说我在一个部门及其雇员之间存在一对多关系,并且在我的代码中我可以从部门访问雇员关系,这是否意味着我现在需要遍历每个雇员对象并调用refreshObject:mergeChanges
方法?在代码中这将是
for (Employee *anEmployee in department.employees) {
//some code that accesses an employee's properties
[context refreshObject:enEmployee mergeChanges:NO];
}
看来,如果我不这样做,那么我访问的每个员工对象现在都将包含对该部门的引用,并且最终将导致保留周期。
我的理解在这里正确吗?处理核心数据中的多对多关系时,这是标准方法吗?谢谢。
最佳答案
正如您可以在Breaking Relationship Retain Cycles上检查的那样,保留周期对于防止重新分配不需要的对象是必需的。这意味着您在使用对象时将其保留下来。
如果完成了该对象的操作并想将其转换为错误对象,则应使用refreshObject:mergeChanges
,以便在可能的情况下处理内存。它不一定会在关系的另一端释放对象,它只会在核心数据上设置一个标志,以便在必要时可以将对象转换为故障。
关于core-data - 核心数据: avoiding retain cycles in to-many relationships,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3984222/