9

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

-(void)dealloc {
    //cleanup code
    [super dealloc];
}

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

4

2 回答 2

22

过渡到 ARC 发行说明(重点是我的):

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

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

因此,您可以在使用 ARC 时进行相同类型的清理dealloc,只是不要调用super.

于 2013-05-03T12:03:02.277 回答
5

当 ARC 处于活动状态时,您根本不调用[super dealloc]. ARC 会为您做到这一点。或者,您可以有一个prepareForDealloc允许您调用的方法,该方法super是从dealloc您的基类内部调用的。

于 2013-05-03T11:53:21.270 回答