我需要在ARC中使用dealloc方法吗?

Vit*_*Vit 39 iphone objective-c ios automatic-ref-counting

所以,我上课了:

@interface Controller : NSObject
{
    UILabel* fileDescription;
}

@property(strong, nonatomic) UILabel* fileDescription;
Run Code Online (Sandbox Code Playgroud)

我是否需要使用方法dealloc,其中属性fileDescription将等于nil?
例如:

-(void)dealloc
{
    fileDescription = nil;
}
Run Code Online (Sandbox Code Playgroud)

如果没有,谁将解雇f​​ileDescription使用的内存?

tro*_*foe 81

通常,您不需要提供子类dealloc方法,因为ARC管理实例变量的生命周期.

但是,除了释放对象之外,执行清理可能很有用,例如,删除观察者或干净地关闭网络连接.因此dealloc,您可以在ARC下进行子类化,但不允许您[super dealloc]在子类方法中进行调用.

但是,在您的特定情况下,它不是必需的.

  • 只是想知道为什么不允许`[super dealloc]`.即使它在最后一个地方? (3认同)
  • @TonyTony因为编译器会自动调用它. (3认同)

Mid*_* MP 9

没有.

你不需要dealloc方法ARC.

但是,如果您想在视图被解雇或释放时执行一些清理任务.这是最好的地方,在这种情况下你可以实现它.

例如:

您正在视图中运行计时器,它正在更新您的视图.当您解除视图时,您需要停止该计时器.在那种情况下你可以使用dealloc方法并在那里停止计时器.

类似的NSNotification观测.

  • 在`dealloc`中停止计时器这有点棘手,因为计时器保留了他们的目标.因此,如果视图控制器使用`target:self`启动计时器,只要计时器正在运行,它就不会被释放.(比较http://stackoverflow.com/questions/14490178/how-to-know-when-to-invalidate-an-nstimer/14490927#14490927.) (6认同)

Ano*_*dya 6

如果您使用ARC.

不需要使用dealloc和release,编译器知道你的属性和对象是强/弱的,所以它会管理它.

编辑:

dealloc如果您使用像CG...&这样的coreframework对象,则需要使用方法CF....即使您为需要删除它的通知创建观察者,dealloc也是removeObserver的最佳位置.