ARC在IBOutlet属性中的使用
来源:互联网 发布:打开钱箱的软件 编辑:程序博客网 时间:2024/04/30 10:41
转自: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属性中的使用
- ARC在IBOutlet属性中的使用
- ARC在IBOutlet属性中的使用
- ARC在IBOutlet属性中的使用
- ARC在IBOutlet属性中的使用
- Block在ARC中的使用
- Block在ARC和非ARC中的使用
- ARC和MRC在同一个工程中的使用
- IOS中的IBOutlet 、IBAction
- ARC下IBOutlet用weak还是strong
- ARC下IBOutlet用weak还是strong
- 在ARC中使用非ARC类库
- 属性在ios中的使用
- IBAction IBOutlet的使用
- NIB 在arc中的应用
- ARC 在 Xcode5 中的设置
- Retain特质属性在MRC中的陷阱以及ARC中对其的规避
- ARC和非ARC下使用Block属性的问题
- Java常见内存溢出异常分析
- jQuery draggable遇到的坑——默认设置position值
- Linus:利用二级指针删除单向链表
- 参考Dedecms整合Discuz完全攻略实现最新的结合
- 16个使用精美字体的欧美网页设计欣赏
- ARC在IBOutlet属性中的使用
- iOS-Core-Animation之十五----图层性能
- SQL0010N does not have an ending string delimiter
- codeforces--55D--Beautiful numbers(数位dp,dfs+记忆化)
- 树莓派Rpi编译更换 内核
- (转载)linux命令之三十五wc命令
- SNMPv1原理
- 我的blog
- [学习笔记]学习主题模型(Topic Model)和PLSA( probabilistic latent semantic analysis)