参考:
1)http://ibloodline.com/articles/2016/04/01/uiview-weak-strong.html
2)http://www.jianshu.com/p/5b8e1eafed39
1.知识点
如果IBOutlet对象是nib/storyboard scene的拥有者(File’s owner)所直接持有的对象,那么很显然拥有者必须直接拥有对象的指针,因此属性应设置为strong。而其他的IBOutlet对象的属性需要设置为weak,因为拥有者并不需要直接拥有它们的指针。控制器需要直接控制某一个子视图并且将子视图添加到其他的view tree上去,此时需要strong。
2.问答
1.IBOutlet属性是Weak还是Strong?
1)我们将控件subview拖到xib/storyboard的view上,view持有了subview(强引用)。
2)当我们使用IBOutlet属性控件的时候,我们是在viewController里面使用,而这个IBOutlet属性控件并不一定直接归控制器所有。当他属于VC的时候,我们要用Strong修饰符;当他属于View时,我们要用Weak修饰(避免View和VC同时拥有控件的强引用)。
即使使用Strong,也不会出现循环引用。在一般场景下,也不会发生内存泄露。VC释放的时候,view也会被释放,它们2个持有的subView也会被释放。但是,涉及到多层View的场景时,这么做是非常容易引起bug的。所以,请根据实际场景,确认IBOutlet属性的修饰符。
2.控件和IBOutlet的对应关系是?
1)一个控件可以对应多个IBOutlet,所以他也可以对应多个Action事件
场景:一个基类的xib中有一个通用性的控件,所有的子类中都有一个IBOutlet连接到该控件
2)一个IBOutlet只能对应一个控件