覆盖objective-c中的dealloc方法

Nat*_*Lee 2 objective-c dealloc

有人可以告诉我如果覆盖Objective-C中的dealloc方法会发生什么?因为它会崩溃或者只是开始泄漏记忆.我一直想知道会发生什么以及为什么有必要阻止程序员直接使用dealloc.

在什么情况下你会不得不做这样的事情?

编辑:对不起家伙不清楚.我主要用语言或ARC类型编码.

Lil*_*ard 15

-dealloc在非ARC代码中,覆盖是非常常见的事情.事实上,你很难找到一个不会覆盖它的类.

但要记住的关键是,每次覆盖-dealloc总是以调用结束[super dealloc].

当然,在ARC代码中,覆盖-dealloc不太常见.如果你覆盖它,你就不要调用[super dealloc],因为编译器会为你插入它.但请记住,这只适用于ARC.


Val*_*adu 9

在ARC覆盖该dealloc方法之前非常普遍,您将释放已释放的实例所拥有的ivars.现在,使用ARC,不太常见,但是,您可能必须在某些特殊情况下执行此操作,例如当您从观察中取消注册实例时NSNotificationCenter.

你谈到的规则不是dealloc直接调用(不是覆盖),这通常会导致崩溃,因为你绕过了Cocoa的内部引用计数系统.

编辑:根据您的编辑,如果您[super dealloc]在ARC下调用,您将收到编译时错误.如果没有错误,它可能会导致重复dealloc调用,这会导致程序崩溃.