40

所以,我有课:

@interface Controller : NSObject
{
    UILabel* fileDescription;
}

@property(strong, nonatomic) UILabel* fileDescription;

我是否需要在属性 fileDescription 等于 nil 的情况下使用方法 dealloc?
例如:

-(void)dealloc
{
    fileDescription = nil;
}

如果不是,谁将关闭 fileDescription 使用的内存?

4

5 回答 5

81

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

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

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

于 2013-01-24T12:18:33.620 回答
9

不。

您不需要deallocin 中的方法ARC

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

例如:

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

NSNotification观察者类似。

于 2013-01-24T12:17:21.383 回答
6

如果您使用的是 ARC。

无需使用 dealloc 和 release,编译器知道您的属性和对象是强/弱的,因此它将对其进行管理。

编辑:

dealloc如果您使用CG...&之类的核心框架对象,则需要方法CF...。即使您为需要删除它的通知创建观察者,dealloc也是删除观察者的最佳位置。

于 2013-01-24T12:16:10.143 回答
0

Ans 是 NO 因为有了 ARC 就不需要解除分配。

于 2013-01-24T12:16:07.363 回答
0

当您使用 ARC 时,您不必使用dealloc Complier 将根据属性、变量或控件的范围设置 autoreleasePool。它会release记住的。有不同类型的自动释放池,通常我们可以将它们定义为函数级别、类级别等。希望这会有所帮助。

于 2013-01-24T12:17:09.647 回答