objective-c中release和dealloc之间的差异

时间:2009-02-18 00:03:21

标签: objective-c memory

在取消分配参考资料时,我看到releasedealloc正在使用

-(void)dealloc
{
  [foo release];
  [nar dealloc];

  [super dealloc];
}

我的问题是何时使用release以及何时使用dealloc

由于

3 个答案:

答案 0 :(得分:54)

除了课程dealloc方法结尾的[super dealloc]外,切勿致电deallocrelease方法放弃对象的所有权。当Cocoa对象不再拥有任何所有者时,它可能会被释放 - 在这种情况下,它将自动发送dealloc消息。

如果你打算编写Cocoa,你需要阅读Memory Management Guidelines。一旦你克服了最初的驼峰,这是非常简单的,如果你不明白该文件中的内容,你会有很多微妙的错误。

答案 1 :(得分:2)

当对象的保留计数变为零时(通过向其发送释放消息的对象),将调用示例中的dealloc语句。

由于不再需要它,它会通过向它所持有的对象发送release消息来清理自己。

答案 2 :(得分:1)

你永远不应该明确地调用dealloc(除非它是dealloc方法中的[super dealloc],但这是唯一的例外)。 Objective-C通过引用计数处理内存管理,所以你只需要将你的allocs / retainins与release / autoreleases匹配,让对象解构自己。