24

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

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

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

4

3 回答 3

9

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

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

于 2013-04-09T18:30:58.017 回答
5

如果您需要在显示和隐藏子视图之间切换,最好的方法肯定是隐藏它。无论如何UIButton,记忆的影响并不是那么好。如果只是切换hidden属性,代码肯定会更简单。

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

于 2012-07-04T12:30:12.487 回答
0

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

如果您使用的是 AutoLayout,则隐藏的视图仍将被布局,而不是已删除的视图(其引用保存在某处)。根据您的情况,这可能会产生性能差异。

于 2019-12-06T10:52:05.647 回答