Performance of UIView: removeFromSuperview VS hide

前端 未结 3 1239
梦谈多话
梦谈多话 2020-12-28 15:29

This question is really basic. What is the performance difference between removing a UIView from the view hierarchy and hiding a UIView?

I

相关标签:
3条回答
  • 2020-12-28 16:04

    I've done an experiment on iOS6 iPad mini, with a large scroll view that has a lot of rich content (including images, drop shadows, gradient layers, patterned background images, you know, those designers:) ) and I found that view.hidden=YES ≠ [view removeFromSuperview].

    I originally thought that setting hidden to YES will make the view not being render/drawn, therefore having a lot of hidden views will have no impact on efficiency. But the actual result is: 1) if I set the offscreen views in the big scroll view to hidden (and unhide them when they come back into visible area), the scrolling is not smooth/continuous at all. When it's naturally decelerating it looks very jumpy. 2) if I remove the offscreen views from the scroll view (but still keep in memory with a tracking array, so when they come back in they can be added immediately), the scrolling is obviously smoother.

    0 讨论(0)
  • 2020-12-28 16:08

    Some years have passed between the initial question and the (rightfully) accepted answer. Let me add another factor: In the meantime, Apple has introduced AutoLayout, which — as some say — might come with quite a performance penalty in certain (deep) subview hierarchies.

    If you are using AutoLayout, a view that is hidden will still get layouted, as opposed to the removed view (with its reference saved somewhere). Depending on your scenario, this could then make a performance difference.

    0 讨论(0)
  • 2020-12-28 16:14

    If you need to alternate between showing and hiding the subview, the best approach is definitely hiding it. For a UIButton the memory implications are not that great anyway. And the code is certainly simpler if you just switch the hidden property.

    Also, you get the additional advantage that the hidden property is animatable!

    0 讨论(0)
提交回复
热议问题