重写objective-c中的dealloc方法



有人能告诉我如果你在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调用,这将导致程序崩溃。

最新更新