为什么删除子视图?

时间:2012-06-16 18:04:47

标签: iphone objective-c ios xcode subviews

我意识到如果从应用程序中相应地删除子视图,内存管理似乎更好(我的应用程序中有很多子视图)。

所以我的问题是必须删除您创建的所有子视图或其可选项(当您的子视图非常少时,因此它不会对内存使用造成太大影响)?

3 个答案:

答案 0 :(得分:3)

你看到界面响应明显跳跃,因为子视图实际上消耗了相当多的内存(UIViews与其底层CALayers相比非常昂贵),因此,调用-removeSubview不仅可以解除压力来自GPU,但也可以释放更多内存,因为子视图通常会在之后发布。

但是要回答你的问题:不会。一旦视图超出了上下文,或从子视图树中删除,它自己的子视图树就会被破坏,视图会在ARC环境中释放,然后为你销毁。即使没有ARC,也没必要。

答案 1 :(得分:2)

这不是必须的,因为当删除了持有视图的超级视图时,它的所有子视图都被删除了,你真的不需要担心删除视图,

答案 2 :(得分:0)

我发现为我创建的每个子视图分配标签允许我在删除超视图之前的某个未来点删除它,使得根据标签值进出元素变得简单。
视图上的每个对象都是一个子视图,因此当以简单的方式使用图形时,保留标记对于某些应用程序似乎是合理的。

假设你想绘制一条简单的水平线:

绘制水平线的函数的一部分:

CGFloat lineWidth=8;
UIView *lineView = [[UIView alloc]initWithFrame:CGRectMake(oxx,oyy-(lineWidth/2),pxx+(lineWidth/2),pyy)];
lineView.backgroundColor = colours;
lineView.tag=5;
[self.view addSubview: lineView]; ...

然后一段时间后,删除一些标记的子视图:

 for (UIView *subview in [self.view subviews]) {
    if (subview.tag == 101 || subview.tag == 102 ||subview.tag == 103 ||subview.tag == 104 || subview.tag == 5) {
        [subview removeFromSuperview];
    }
}