UI控件为什么要用weak

494 阅读1分钟

首先纠正一下标题, 不应该叫UI控件, 而是通过xib直接拖拽的UI控件(

@property (weak, nonatomic) IBOutlet UIButton *testBtn;

). 对于新学习的同学可能不太容易理解week属性, 误以为, week是为了解决循环引用的而使用的, 而事实上, 通过xib拖拽的控件属性, 系统自动使用week修饰, 不是为了解决循环引用问题的. 这个应该很好理解, 首选分析什么是循环引用, 循环引用通俗的讲就是你中有我,我中有你, 然而, 对于UI控件来说, 只是容器的view拥有了被拖拽进来的view, 并没有反向的拥有关系, 因此这里构不成循环引用, 那么此处的week必然不是解决循环引用用的, 具体是干什么的呢,

因为View中有一个强引用的subviews数组,通过xib拖拽过来的视图默认会被加入到subviews数组中, 这时候, 当前view相当于间接地强用用这视图, 所如果属性的修饰符还用strong的话相当于多次强引用, 当然多次引用并不会因为程序问题, 但是对于程序设计者来说这种重复引用是不应该的, 就像一辆自行车, 如果你明知道锁一个锁就能防止被偷的话, 那作为正常人都会选择锁一把锁, 而有些不正常的人才会锁两把锁, 当然多一把锁也不会有太大的问题!