有人能告诉我如果你在Objective-C中重写dealloc方法会发生什么吗?就像它会崩溃或者它会开始到处泄漏内存一样。我一直想知道会发生什么,为什么有必要阻止程序员直接使用dealloc。
在什么情况下你必须做这样的事情?
EDIT:抱歉伙计们不清楚。我主要讲的是ARC类型编码
重写-dealloc
是在非arc代码中非常常见的事情。实际上,您很难找到一个不覆盖它的类。
要记住的关键是,每次覆盖-dealloc
总是以调用[super dealloc]
结束。
当然,在ARC代码中,重写-dealloc
要少见得多。如果你重写它,你不会调用[super dealloc]
,因为编译器会为你插入那个。但请记住,这只在ARC下成立。
在ARC覆盖dealloc
方法非常普遍之前,您正在释放被释放实例所拥有的变量。现在,对于ARC,不太常见,但是,在某些特殊情况下,您可能必须这样做,例如当您从NSNotificationCenter
中注销一个实例时。
你说的规则是不要直接调用dealloc
(而不是重写),这通常会导致崩溃,因为你绕过了Cocoa的内部引用计数系统。
Edit:基于你的编辑,如果你在ARC下调用[super dealloc]
,你会得到一个编译时错误。如果没有错误,它可能会导致重复dealloc
调用,这将导致程序崩溃。