Objective-c中release和dealloc的区别
Posted
技术标签:
【中文标题】Objective-c中release和dealloc的区别【英文标题】:Difference between release and dealloc in objective-c 【发布时间】:2010-10-08 05:46:52 【问题描述】:在解除引用时,我看到 release
和 dealloc
被用作示例
-(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 实现——学习总结
iOS Objective-C dealloc方法释放的是啥?