UIView的表现:removeFromSuperview VS hide

bas*_*bas 19 objective-c subview uiview ios

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

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

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

Bao*_*Lei 8

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

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

  • 实际上对我来说,重申一个事实,即将UIView设置为'hidden'会使其无法呈现,并可能以某种方式提高性能.当然,跳跃是通过使它"无遮挡",这可能会强制setNeedsDisplay和setNeedsLayout(不确定后者),这将导致减速.对于tableview来说,这可能是一个坏主意,但是对于其他视图"背后"更大的视图,隐藏它可能是一个好主意,以便在不需要时不会不必要地重绘. (3认同)

Mun*_*ndi 5

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

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