1

当用户在应用程序中移动时,我将 UIViews 堆叠在一起,在不同的屏幕之间来回移动。这些 UIView 可以是普通控件(按钮、标签等),也可以是继承自 UIView 的自定义控件。在其中一个屏幕上按下后退按钮时,我会执行大量清理代码来释放实例变量的内存,以及停止计时器和关闭网络连接。我认为在这里我使用 ARC 并部署到 iOS 6 和 iOS 7 设备也很重要。

一个典型的控件将这样编码:

    UIImageView *ivSoundBottom = [[UIImageView alloc] initWithFrame:CGRectMake(270, 365, 30, 30)];
    UIImage *imgSoundBottom = [UIImage findCustomImage:@"ICN_Alarm_Sound_Bottom.png"];
    [ivSoundBottom setImage:imgSoundBottom];
    [self addSubview:ivSoundBottom];
    imgSoundBottom = nil;
    ivSoundBottom = nil;

此控件在屏幕加载时创建,并且不再被引用。

我的问题是:在 ARC 下,我是否还需要遍历所有子视图并在每个子视图上调用 removeFromSuperview 以释放内存?

4

1 回答 1

1

不,你没有。您也不需要这些语句:

imgSoundBottom = nil;
ivSoundBottom = nil;

由于 ARC 将意识到对这些变量的引用已经超出范围并为您执行此操作。

于 2013-10-21T14:56:47.957 回答