OC 弱引用 weak __weak assign __assign
来源:互联网 发布:jackson json 官网 编辑:程序博客网 时间:2024/04/29 02:47
弱引用
在计算机程序设计中,弱引用,与强引用相对,是指不能确保其引用的对象不会被垃圾回收器回收的引用。一个对象若只被弱引用所引用,则被认为是不可访问(或弱可访问)的,并因此可能在任何时刻被回收。一些配有垃圾回收机制的语言,如Java、C#、Python、Perl、Lisp等都在不同程度上支持弱引用。垃圾回收用来清理不会再使用的对象,从而降低内存泄露和数据损坏的可能性。垃圾回收主要有两种类型:追踪和引用计数。引用计数会记录给定对象的引用个数,并在引用个数为零时收集该对象。由于一次仅能有一个对象被回收,引用计数无法回收循环引用的对象。一组相互引用的对象若没有被其它对象直接引用,并且不可访问,则会永久存活下来。一个应用程序如果持续地产生这种不可访问的对象群组,就会发生内存泄漏。在对象群组内部使用弱引用(即不会在引用计数中被计数的引用)有时能避免出现引用环,因此弱引用可用于解决循环引用的问题。如Apple的Cocoa框架就推荐使用这种方法,具体为,在父对子引用时使用强引用,子对父引用时使用弱引用,从而避免了循环引用。
程序对一些对象只进行弱引用,通过此法可以指明哪些对象是不重要的,因此弱引用也用于尽量减少内存中不必要的对象存在的数量。
在Objective-C 2.0中,除了垃圾回收,自动引用计数也会受弱引用的影响。下面这个例子中的所有变量和属性都是弱引用。
@interface WeakRef : NSObject{ __weak NSString *str1; __assign NSString *str2;} @property (nonatomic, weak) NSString *str3;@property (nonatomic, assign) NSString *str4; @end
weak
(__weak
)和assign
(__assign
)的区别在于,当变量指向的对象被重新分配时,变量的值是否会跟着改变。weak
声明的变量会变为nil
,而assign
声明的变量则会保持不变,成为一个悬摆指针。从Mac OX 10.7 “狮子”系统和iOS 5开始,随着Xcode 4.1版本的推出,weak
引用被引入到Objective-C语言中(4.2版本开始支持iOS)。老版本的Mac OS X、iOS和GNUstep仅支持用assign
声明弱引用。
0 0
- OC 弱引用 weak __weak assign __assign
- assign、weak、strong、retain、__block、__weak
- assign vs weak, __block vs __weak
- oc strong weak retain assign
- OC中weak/assign/strong
- oc strong weak retain assign 详解
- 请解释以下keywords的区别: assign vs weak, __block vs __weak
- 对copy/strong/weak/__weak/__strong/assign的使用场景总结总结
- @property 关键字的区别详解:assign、weak、 __block 、__weak、strong 、copy的区别
- __weak及弱引用简记
- OC中的关键字,weak,assign,copy,strong,nonatomic,retain
- iOS weak和assign修饰OC对象的区别
- 关于强弱引用的问题 strong,weak,assign
- __weak弱引用的对象定义
- retain、strong、weak、assign
- assign vs weak
- weak assign copy block
- weak与strong ,assign
- 转 Python 2.7 学习摘记
- 校招9月份找工作的童鞋进
- 数据统计的错误分析与改进
- 使用SiteScope监控WebLogic
- 快排算法quickSort
- OC 弱引用 weak __weak assign __assign
- HDU_ACM-2057 A+B again
- HDU1007Quoit Design(最小点对)
- Unity3D NGUI事件 UIEvents
- Java简述
- HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议
- OC 的13个缺点
- 【Stanford Machine Learning】Lecture 2--Linear Regression with Multiple Variables
- Oracle、MySql、SQLServer 数据分页查询