首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >核心数据和保留周期

核心数据和保留周期
EN

Stack Overflow用户
提问于 2009-11-24 21:12:24
回答 1查看 1.8K关注 0票数 6

我有一个核心数据类Game,它与另一个类玩家有一对多的关系。这是它们的头的样子

代码语言:javascript
复制
@property (nonatomic, retain) NSSet * players; // In Game.h
@property (nonatomic, retain) Game * game; // In Player.h (the inverse relationship)

当我释放游戏类的最后一个外部引用时,didTurnIntoFault没有被调用。现在,我的问题是,这可能是由于上面创建的循环引用(如你所见,两个属性都是'retain'),还是核心数据管理了所有这些,问题出在我的代码中的某个地方。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-11-25 01:51:02

参见Core Data Programming Guide: Memory Management (Breaking Relationship Retain Cycles)

当托管对象之间存在关系时,每个对象都会维护对与其相关的一个或多个对象的强引用。在托管内存环境中,这会导致保留周期(请参见Object Ownership and Disposal),从而可以防止释放不需要的对象。为了确保保留周期被打破,当您处理完一个对象时,您可以使用托管对象上下文方法refreshObject:mergeChanges:将其转换为错误。

通常使用refreshObject:mergeChanges:刷新托管对象的属性值。如果mergeChanges标志为YES,则该方法将对象的属性值与持久存储协调器中可用的对象的属性值合并。但是,如果该标志为NO,则该方法只会在不合并的情况下将对象重新转换为错误,这会导致它释放相关的托管对象。这打破了该托管对象和它所保留的其他托管对象之间的保留循环。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1789974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档