Objective-c中release和dealloc的区别

Posted

技术标签:

【中文标题】Objective-c中release和dealloc的区别【英文标题】:Difference between release and dealloc in objective-c 【发布时间】:2010-10-08 05:46:52 【问题描述】:

在解除引用时,我看到 releasedealloc 被用作示例

-(void)dealloc

  [foo release];
  [nar dealloc];

  [super dealloc];

我的问题是什么时候使用release,什么时候使用dealloc

谢谢

【问题讨论】:

如果你在-dealloc定义中调用[self dealloc],那么它会导致递归。你确定代码正确吗? 【参考方案1】:

永远不要调用dealloc,除非在你的类的dealloc方法结束时调用[super dealloc]release 方法放弃对象的所有权。当 Cocoa 对象不再有任何所有者时,它可能会被释放——在这种情况下,它会自动发送dealloc 消息。

如果你要对 Cocoa 进行编程,你需要阅读Memory Management Guidelines。一旦您克服了最初的困难,这将非常简单,如果您不了解该文档中的内容,您将遇到很多细微的错误。

【讨论】:

我在示例中显示的 [self dealloc] 怎么样,真的需要这样做吗? 不仅没有必要,在你的 dealloc 方法中调用 [self dealloc] 会创建一个无限循环。【参考方案2】:

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

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

【讨论】:

【参考方案3】:

您永远不应该显式调用 dealloc(除非它是 dealloc 方法中的 [super dealloc],但这是唯一的例外)。 Objective-C 通过引用计数处理内存管理,因此您只需将分配/保留与释放/自动释放相匹配,并让对象自行解构。

【讨论】:

以上是关于Objective-c中release和dealloc的区别的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C 内存管理retain和release

《Objective-C 高级编程》 1.2.3节 alloc/retain/release/dealloc 实现——学习总结

黑箱中的 retain 和 release

iOS Objective-C dealloc方法释放的是啥?

Objective-C中,ARC下的 strong和weak指针原理解释

Objective-c 发布被调用了这么多次