在objective-c中release和dealloc之间的区别
当释放一个引用时,我已经看到release
和dealloc
被用作例子
-(void)dealloc { [foo release]; [nar dealloc]; [super dealloc]; }
我的问题是什么时候release
被使用,何时dealloc
被使用?
谢谢
除非在类的dealloc
方法结束时使用[super dealloc]
,否则不要调用dealloc
。 release
方法放弃对象的所有权。 当一个Cocoa对象不再拥有任何拥有者时,它可能会被释放 – 在这种情况下,它会自动发送一个dealloc
消息。
如果你要编程Cocoa,你需要阅读内存pipe理指南 。 如果你不了解这个文档中的内容,那么一旦你完成了最初的驼峰,它就变得非常简单了,你将会有很多细微的bug。
当对象的保留计数变为零时(通过对象发送释放消息),将调用示例中的dealloc
语句。
由于它不再需要,它通过发送release
消息给它所持有的对象来清除自己。
你永远不应该显式调用dealloc(除非它在dealloc方法中是[super dealloc],但这是唯一的例外)。 Objective-C通过引用计数来处理内存pipe理,所以你只需要将你的alloc / retain与release / autoreleases进行匹配,然后让对象解构。