UI控件为什么要用weak

本文解释了在iOS开发中,通过XIB文件拖拽UI控件时,默认使用弱引用的原因,并非为解决循环引用问题。文章分析了强引用与弱引用的区别,以及为何在XIB中使用弱引用更加合理。

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

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

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

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


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值