iphone NSManagedObject - 解除分配的正确方法?

ary*_*axt 7 cocoa-touch core-data objective-c nsmanagedobject ios

我有一个NSManagedObject的子类,大多数属性是动态的(由托管对象创建),但我有一些辅助属性,它们被创建为@synthesize.

释放这些物体的正确方法是什么?

- (void)didTurnIntoFault
{
     [self.randomVar release];
     [super didTurnIntoFault];
}
Run Code Online (Sandbox Code Playgroud)

要么

- (void)dealloc
{
     [self.randomVar release];
     [super dealloc];
}
Run Code Online (Sandbox Code Playgroud)

Bol*_*ock 11

覆盖didTurnIntoFault并释放它们.管理对象在出现故障时不一定要解除分配.

文档:

不鼓励您不要覆盖,dealloc或者finalize因为didTurnIntoFault通常是清除值的更好时间 - 托管对象在变为故障后的一段时间内可能无法回收.核心数据不保证要么deallocfinalize将在所有情况下(例如,当在应用程序退出)被调用; 因此,您不应该在这些方法中包括所需的副作用(如保存或更改文件系统,用户首选项等).


wes*_*der 6

您可能需要仔细查看"核心数据编程指南".这两个段落特别相关

如果定义自定义实例变量,则应该在didTurnIntoFault中清除这些变量,而不是dealloc或finalize.

您通常不应覆盖dealloc或finalize以清除瞬态属性和其他变量.相反,您应该覆盖didTurnIntoFault.