Objective-C析构函数与ARC

yui*_*nnu 9 destructor objective-c automatic-ref-counting

我正在尝试通过覆盖dealloc在Objective-C类中创建一些清理代码:

-(void)dealloc {
    //cleanup code
    [super dealloc];
}
Run Code Online (Sandbox Code Playgroud)

虽然我不能这样做,因为[super dealloc]启用ARC时编译器不允许这样做.有没有我可以使用的替代方案?

omz*_*omz 22

过渡到ARC发行说明(强调我的):

如果需要管理除释放实例变量之外的资源,则可以实现dealloc方法.您不必(实际上您不能)释放实例变量,但您可能需要在系统类和未使用ARC编译的其他代码上调用[systemClassInstance setDelegate:nil].

ARC中的自定义dealloc方法不需要调用[super dealloc](它实际上会导致编译器错误).链接到super是由编译器自动执行的.

所以你在dealloc使用ARC时可以进行同样的清理,只是不要打电话super.


aLe*_*ion 5

当ARC处于活动状态时,您根本就不会打电话[super dealloc].ARC会为你做这件事.或者,您可以使用一种prepareForDealloc允许您调用的方法,super以及从dealloc基类中调用的方法.