Core data 核心数据和保留周期

Core data 核心数据和保留周期,core-data,Core Data,我有一个核心数据类游戏,它与另一个类玩家有一对多的关系。这就是它们的标题的样子 @property (nonatomic, retain) NSSet * players; // In Game.h @property (nonatomic, retain) Game * game; // In Player.h (the inverse relationship) 当我释放对游戏类的最后一个外部引用时,没有调用didturnintofult。现在,我的问题是,这可能是由于上面创建的循环引用(

我有一个核心数据类游戏,它与另一个类玩家有一对多的关系。这就是它们的标题的样子

@property (nonatomic, retain) NSSet * players; // In Game.h
@property (nonatomic, retain) Game * game; // In Player.h (the inverse relationship)
当我释放对游戏类的最后一个外部引用时,没有调用didturnintofult。现在,我的问题是,这可能是由于上面创建的循环引用(如您所见,这两个属性都是“retain”)造成的,还是核心数据管理了所有这些,而问题在我的代码中的某个地方

当托管对象之间存在关系时,每个对象都会维护对与其相关的一个或多个对象的强引用。在托管内存环境中,这会导致保留周期(请参阅),从而防止释放不需要的对象。为了确保中断保留周期,当您使用完一个对象后,可以使用托管对象上下文方法将其转化为故障

通常使用
refreshObject:mergeChanges:
刷新托管对象的属性值。如果
mergeChanges
标志为
YES
,则该方法将对象的属性值与持久存储协调器中可用对象的属性值合并。但是,如果标志为
NO
,则该方法只会将对象重新转换为故障,而不进行合并,从而使其释放相关的托管对象。这将打破该托管对象与其保留的其他托管对象之间的保留周期


我可以发誓我是RTFM,但我想我:)无论如何,谢谢!我想补充一点,您必须递归地执行此操作,即中断托管对象的周期不会自动中断子对象之间可能存在的任何周期