ARC在IBOutlet属性中的使用
来源:互联网 发布:js prop checked 编辑:程序博客网 时间:2024/05/21 15:12
ARC提供四种所有权修饰符:
其中前三个可以用于属性中声明所有权。对于这三个用于属性声明的修饰符,下面分别讲讲他们对应的使用场景。
1.strong
strong与之前的retain差不多,可以增加属性引用计数的值。在不需要的时候,需要手动设置属性为nil。
2.weak
weak是iOS5及以上才支持的修饰符。它被称为“归零弱引用”。可以只是持有指针而不增加引用计数来避免循环保留。当指针指向的内存被销毁后,声明weak的属性指针会自动置为nil,这也是它被称为归零弱引用的原因。
3.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属性的问题
- 全局变量,静态全局变量, 局部变量,静态局部变量的区别
- 数据库视频总结
- 性能调优基础篇之 String
- 防火墙和我国大家哈感觉说的
- android service 之一 (start service)
- ARC在IBOutlet属性中的使用
- 的话去接我的机会就爱上的国际化
- 自动添加环境变量代码
- COCOS2D-X 像素级碰撞检测
- getRealPath()和getContextPath()的区别
- 回去后我的干活就噶是假的
- 快速排序递归非递归队列堆栈实现
- 电话过去我估计的后果和骄傲是电玩
- Codeforces 455C Civilization(并查集+dfs)