UIView: alpha:0, hidden:YES, removeViewFromSuperview 和 frame.origin.y = -100000 之间的性能/内存差异;
Posted
技术标签:
【中文标题】UIView: alpha:0, hidden:YES, removeViewFromSuperview 和 frame.origin.y = -100000 之间的性能/内存差异;【英文标题】:UIView: Performance/memory difference between alpha:0, hidden:YES, removeViewFromSuperview and frame.origin.y = -100000; 【发布时间】:2014-02-12 12:44:10 【问题描述】:暂时隐藏视图(例如,直到加载完成)时,什么对设备最有利?
将 alpha 设置为 0? 将隐藏设置为“是”? 从超级视图中删除视图? 将视图移动到无法在窗口/屏幕上显示的位置(例如 frame.origin.y = -10000)?哪个在内存方面最好,哪个在性能方面最好?我知道 Apple 在某处写过一些关于此的内容,但我找不到。
【问题讨论】:
Performance of UIView: removeFromSuperview VS hide 的可能重复项 @James 好吧,我认为它不能涵盖所有替代方案 @James 同样,内存与性能一样重要。 【参考方案1】:哪个记忆力最好
removeFromSuperview
是记忆力最好的。为什么 ?因为它会导致视图被释放。因此,如果视图未被其他任何人保留(如强 ivar),它将被释放。
哪个性能最好?
setHidden:
在性能方面是最好的。为什么 ?因为这个动作只是设置一个标志。然后在 drawRect 中它只是一个 BOOL 检查。所以它真的很快,因为不涉及其他操作。
【讨论】:
【参考方案2】:所以,最快的方法优先:
setHidden
(仅从渲染中丢弃视图)
alpha
到 0
等于 setHidden, but it first checks if
0`
removeFromSuperView
(需要一些步骤:释放对象,从堆栈(指针)中弹出,从渲染堆栈中删除...)
frame.origin.y=-10000
> 必须移动整个位数组并检查视图是否超出范围。不是很快...
【讨论】:
以上是关于UIView: alpha:0, hidden:YES, removeViewFromSuperview 和 frame.origin.y = -100000 之间的性能/内存差异;的主要内容,如果未能解决你的问题,请参考以下文章
UIView alpha = 0 导致触摸被拖放到下面的视图
UIView: alpha:0, hidden:YES, removeViewFromSuperview 和 frame.origin.y = -100000 之间的性能/内存差异;