UIView的表现:removeFromSuperview VS hide

时间:2012-07-04 12:09:33

标签: ios objective-c uiview subview

这个问题非常基本。从视图层次结构中删除UIView和隐藏UIView之间的性能差异是什么?

我已经读过应该从视图层次结构中删除不需要的视图。我目前的情况是UIButton有时应该可见。我何时隐藏UIButton,何时将其从超级视图中删除?

更改视图层次结构是否很昂贵?

3 个答案:

答案 0 :(得分:8)

我在iOS6 iPad mini上做了一个实验,有一个大滚动视图,里面有很多丰富的内容(包括图像,阴影,渐变图层,图案背景图片,你知道,那些设计师:))和我发现view.hidden = YES≠[查看removeFromSuperview]。

我原本以为将隐藏设置为YES会使视图无法渲染/绘制,因此拥有大量隐藏视图对效率没有影响。但实际结果是: 1)如果我将大滚动视图中的屏幕外视图设置为隐藏(当它们返回可见区域时取消隐藏它们),则滚动根本不是平滑/连续的。当它自然减速时,它看起来非常跳跃。 2)如果我从滚动视图中删除屏幕外视图(但仍然在内存中跟踪数组,所以当它们重新进入时可以立即添加),滚动显然更加平滑。

答案 1 :(得分:3)

如果你需要在显示和隐藏子视图之间交替,最好的方法肯定是隐藏它。对于UIButton而言,内存含义无论如何都不是那么好。如果你只是切换hidden属性,那么代码肯定会更简单。

此外,您还可以获得hidden属性可动画的额外优势!

答案 2 :(得分:0)

从最初的问题到(正确地)被接受的答案之间已经过去了几年。让我补充一个因素:与此同时,Apple推出了AutoLayout,正如某些人所说,在某些(深)子视图层次结构中,AutoLayout可能会带来相当大的性能损失。

如果您使用的是自动版式,则相对于已删除的视图(其引用保存在某处),仍将对隐藏的视图进行布局。根据您的情况,这可能会带来性能差异。