您的位置:首页 > 产品设计 > UI/UE

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的话相当于多次强引用, 当然多次引用并不会因为程序问题, 但是对于程序设计者来说这种重复引用是不应该的, 就像一辆自行车, 如果你明知道锁一个锁就能防止被偷的话, 那作为正常人都会选择锁一把锁, 而有些不正常的人才会锁两把锁, 当然多一把锁也不会有太大的问题!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息