手动创建控件用 weak 还是用 strong?

1、同时声明一个srong和weak的UIButton

声明

2、那我们来看一下各自的引用计数,ARC利用KVC获取;初始化后的引用计数

初始化


retainCount

3、下面我们将控件removeFromSuperview

removeFromSuperview
输出结果

4、利用touches事件打印button和button1,可以看出来strong修饰的button仍然占有内存,weak修饰的button1的内存被销毁,避免了僵尸指针出现。

输出结果

其实不管声明的属性是强引用还是弱引用,在控制器消失的时候,这个属性消失,View消失,subViews消失,控件也就消失了。

当控件的父view销毁时,如果你还想继续拥有这个控件,就用srtong;如果想保证控件和父view拥有相同的生命周期,就用weak。当然在大多数情况下用两个都是可以的,所以并没有说用weak就一定是对的,strong是错的,还是需要根据实际的业务情况来定!

另外注意一原则:UIViewController下的view,由于viewcontroller直接拥有该view,那就应该选择strong。而如果控件是viewcontroller中view的子视图,对于这个子视图,它的所有者是它的父视图,代码中只是想引用一下这个子视图的指针而已,那么就应该选择weak。

你可能感兴趣的:(手动创建控件用 weak 还是用 strong?)