UI控件为什么要用weak
2016-05-09 19:42
302 查看
首先纠正一下标题, 不应该叫UI控件, 而是通过xib直接拖拽的UI控件(@property (weak, nonatomic) IBOutlet UIButton *testBtn;
). 对于新学习的同学可能不太容易理解week属性, 误以为, week是为了解决循环引用的而使用的, 而事实上, 通过xib拖拽的控件属性, 系统自动使用week修饰, 不是为了解决循环引用问题的. 这个应该很好理解, 首选分析什么是循环引用, 循环引用通俗的讲就是你中有我,我中有你, 然而, 对于UI控件来说, 只是容器的view拥有了被拖拽进来的view, 并没有反向的拥有关系, 因此这里构不成循环引用, 那么此处的week必然不是解决循环引用用的, 具体是干什么的呢, 我们可以看一下下图进行分析:
如图, 因为View中有一个强引用的subviews数组,通过xib拖拽过来的视图默认会被加入到subviews数组中, 这时候, 当前view相当于间接地强用用这视图, 所如果属性的修饰符还用strong的话相当于多次强引用, 当然多次引用并不会因为程序问题, 但是对于程序设计者来说这种重复引用是不应该的, 就像一辆自行车, 如果你明知道锁一个锁就能防止被偷的话, 那作为正常人都会选择锁一把锁, 而有些不正常的人才会锁两把锁, 当然多一把锁也不会有太大的问题!
). 对于新学习的同学可能不太容易理解week属性, 误以为, week是为了解决循环引用的而使用的, 而事实上, 通过xib拖拽的控件属性, 系统自动使用week修饰, 不是为了解决循环引用问题的. 这个应该很好理解, 首选分析什么是循环引用, 循环引用通俗的讲就是你中有我,我中有你, 然而, 对于UI控件来说, 只是容器的view拥有了被拖拽进来的view, 并没有反向的拥有关系, 因此这里构不成循环引用, 那么此处的week必然不是解决循环引用用的, 具体是干什么的呢, 我们可以看一下下图进行分析:
如图, 因为View中有一个强引用的subviews数组,通过xib拖拽过来的视图默认会被加入到subviews数组中, 这时候, 当前view相当于间接地强用用这视图, 所如果属性的修饰符还用strong的话相当于多次强引用, 当然多次引用并不会因为程序问题, 但是对于程序设计者来说这种重复引用是不应该的, 就像一辆自行车, 如果你明知道锁一个锁就能防止被偷的话, 那作为正常人都会选择锁一把锁, 而有些不正常的人才会锁两把锁, 当然多一把锁也不会有太大的问题!
相关文章推荐
- 一些控件中的属性。(未完)
- NSURLSession强引用问题
- 再来讨论__strong 和 strong
- Block 的循环引用:如何产生 和 解决办法
- 认识retain copy assign strong weak 的区别
- OC循环引用另一种解决方案:最后你放手,换来彼此的自由!
- android TouchEvent处理流程分析
- iOS arc机制 strong weak
- __attribute__((weak)) 博大精深的gcc ------ 关于弱符号的用法
- 升级到xcode7.3之后关于weak的错误解决方法
- block 用法以及防止循环引用
- ARC中的weak和strong
- 循环引用检查{"$ref":"$.data[0]"}
- ARC中内存管理相关的关键字
- block
- 关于IOS delegate的weak和assign 探讨
- iOS开发-retain/assign/strong/weak/copy/mutablecopy/autorelease区别
- IOS1.3-按钮的基本使用
- IOS1.1-UI控件浏览
- IOS:代理delegate为什么要用assign或者weak