核心数据:避免在多对多关系中保留周期

Bar*_*cha 14 memory-management core-data ios

我还在学习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];
}
Run Code Online (Sandbox Code Playgroud)

似乎如果我不这样做,我访问的每个员工对象现在都包含对部门的引用,我将最终得到保留周期.

我的理解在这里是否正确?在处理Core Data中的多对关系时,这是一种标准方法吗?谢谢.

vfn*_*vfn 3

正如您可以在打破关系保留周期中检查的那样,保留周期对于防止释放不需要的对象是必要的。这意味着您在使用对象时保留该对象。

refreshObject:mergeChanges如果您使用完该对象并且想要将其变成错误,则应该使用 ,以便在可能的情况下释放内存。它不一定会释放关系另一端的对象,它只会向核心数据设置一个标志,以便在必要时该对象可以变成错误。