iOS UIView的addSubview:和removeFromSuperview方法
2013-06-02 12:01
1206 查看
问题描述: 一个UIView(bView)经过alloc、init之后,add到UIView(aView)上,此时及时的对bView做了release操作。 情况一、现在又有一个UIView(cView),我要做[cView addSubview:bView];那么在此之前有没有必要做[bView removeFromSuperview];操作? 情况二、在某种情况下(比如在按钮的响应事件里),我需要多次执行[aView addSubview:bView];那么在每次add之前有没有必要做remove操作? 说明:情况一和二相互独立的,没有联系。结论是: 两种情况都不需要做remove操作。特别的情况二,如果做了remove操作,在做add操作会引起崩溃,原因是removeFromSuperview会执行release操作,此时它的retainCount已经是0了,内存会被释放。如果把上面release放到dealloc中就不会引起崩溃了。官方文档做依据: If view already has a superview and that view is not the receiver, this method removes the previous superview before making the receiver its new superview.个人理解: 现在有一个勺子,一个杯子,一个缸子。前提是我将勺子放入杯子中了。 情况一、我想将勺子放入缸子中,我所需要做的就是将勺子放入缸子中。因为SDK会判断出此时勺子在杯子中,它会自动执行把勺子从杯子中拿出来的操作。 情况二、我想将勺子放入杯子中,我所需要的还是将勺子放入杯子中。因为SDK会判断出此时勺子就在杯子中,它所执行的就是什么都不做,因为勺子已经在杯子中了。容易混淆的概念: 这是针对同一个UIView的。还有一种情况,把bView加到aView上,此时又将cView加到aView上(bView和cView的frame相同)那么在这个时候是需要对bView做removeFromSuperview操作的。 addSubview:所执行的就是将UIView加到一个集合中,此时如果不移除bView,虽然不会造成内存泄露,但是会浪费内存,没有必要在集合中保存bView了(特殊需求除外)。
本文出自 “李远超” 博客,请务必保留此出处http://lych0317.blog.51cto.com/4436474/1214725
本文出自 “李远超” 博客,请务必保留此出处http://lych0317.blog.51cto.com/4436474/1214725
相关文章推荐
- iOS UIView的addSubview:和removeFromSuperview方法
- iOS: removeFromSuperview方法
- 3.关于removeFromSuperview和addSubview
- addSubview 与 removeFromSuperview
- 随便说说removeFromSuperview方法
- iOS中removeFromSuperview不起作用的问题
- 让视图慢慢消失的效果 removeFromSuperview的替代方法
- iOS开发重新认识removeFromSuperview - 芒果iOS
- 【iOS开发-57】案例改进:block动画、控件的removeFromSuperview、利用layer设置圆角矩形以及代理模式运用
- 随便说说removeFromSuperview方法
- iOS 初始化方法 initWithNibName、initWithCoder、awakeFromNib和 loadNibNamed说明
- removeFromSuperview关键的几个点
- IOS开发-UIView之动画效果的实现方法(合集)
- iPhone开发--removeFromSuperview当tag为0时不能正常工作
- iOS-UIView属性动画和常用方法
- iOS开发-UIView之动画效果的实现方法
- 【代码笔记】iOS-removeFromSuper
- iOS开发之UIView常用的一些方法小记之setNeedsDisplay和setNeedsLayout
- iOS UIView方法使用详情UIView : UIResponder
- iOS开发-UIView之动画效果的实现方法(合集)