本文主要是介绍ARC在IBOutlet属性中的使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
转自:http://nijino.cn/blog/2013/06/24/iboutlet-arc/
ARC提供四种所有权修饰符:
- strong
- weak
- unsafe_unretained
- autoreleasing
其中前三个可以用于属性中声明所有权。对于这三个用于属性声明的修饰符,下面分别讲讲他们对应的使用场景。
-
strong:与之前的retain差不多,可以增加属性引用计数的值。在不需要的时候,需要手动设置属性为nil。
-
weak:是iOS5及以上才支持的修饰符。它被称为“归零弱引用”。可以只是持有指针而不增加引用计数来避免循环保留。当指针指向的内存被销毁后,声明weak的属性指针会自动置为nil,这也是它被称为归零弱引用的原因。
-
unsafe_unretained:对于iOS5以下版本,并不支持ARC中的weak声明,可以用unsafe_unretained声明来代替weak。unsafe_unretained同样也是不增加引用计数的值,但它没有“归零”的动作,需要手动操作,一般作为支持iOS5以下weak的替代方案。
解释了3种属性的意义,下面说说对于属性声明为IBOutlet时3种所有权修饰符的取舍以及使用技巧。
由于我自己很熟悉Interface Bulider中的操作,所以非常喜欢那种拉控件然后连线并直接声称属性代码的操作。对于直接从xib或者storyboard拉出来生成的IBOutlet属性,一般是选择strong还是weak呢?
这里有个原则:
如果该控件位于控件树的顶部,比如 UIViewController下的view,那就应该选择strong,因为viewcontroller直接拥有该view。例如右图中的View。
而如果控件是viewcontroller中view的子视图,对于这个子视图,它的所有者是它的父视图,代码中只是想引用一下这个子视图的指针而已,那么就应该选择weak(iOS5以下选择unsafe_unretained)。例如左图中的UILabel。
对于以上的概念,我用一张图表来说明:
这篇关于ARC在IBOutlet属性中的使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!