- (void)dealloc {
[super dealloc];
[receivedData release]; receivedData = nil;
}
或
- (void)dealloc {
[receivedData release]; receivedData = nil;
[super dealloc];
}
答案 0 :(得分:16)
是的,它在调用[super dealloc]
时绝对匹配。调用[super dealloc]
后,您就不能再依赖NSObject
(或任何根类)机制来正常运行。毕竟,你的超类'-dealloc
方法应该调用它的超类'等,直到调用根类'-dealloc
方法。此时,这些类分配用于完成其工作的所有内容都可能消失,如果您尝试使用其中任何一个,则处于未定义的区域。
您的-dealloc
方法应始终如下
- (void)dealloc
{
// release my own stuff first
[super dealloc];
}
答案 1 :(得分:13)
是。持续。总是
答案 2 :(得分:4)
是的,[super dealloc]
必须始终是最后一个,如上所述,因为引用self
或通常认为理所当然的任何其他内部都不会起作用,并且可能会崩溃,如上所述。
上面没有说明的另一个原因是ivars位于self
指向的内存块中,所以如果你在[super dealloc]
之后对那些ivars做任何事情(比如发布)那么你会也可以解除引用释放的内存。
我上面说'可能会崩溃',因为当你不正确地执行此操作时,它往往不会崩溃,这是有道理的,考虑到内存在重用之前不会被覆盖。这使情况变得更糟,因为你可能会有一个只会偶尔发生的错误,这使得它更难以找到,以防它在你脸上爆炸。
除此之外,如果您在[super dealloc]
之后发布局部变量或诸如此类的东西,那么你就完全没问题了,如果你真的想要的话,你可以这样做
id local = ivar;
[super dealloc];
[local release];
安全,但为了保持一致,请不要。
总之,是的,[super dealloc]
必须是-dealloc中的最后一件事。