今天将谈谈IOS 5中新增的strong和weak关键字
strong 用来修饰强引用的属性,只要有个strong指针指向该变量内存就不会被释放;
@property (strong) SomeClass * aObject;
对应原来的
@property (retain) SomeClass * aObject; 和 @property (copy) SomeClass * aObject;
weak 用来修饰弱引用的属性,即使有weak指针指向改变量,而没有strong指针指向他时,照样释放,常用于控件,因为控件的内存一般由view去维护,当将控件加入一个viewcontroller时,其实调用了[self.view addsubview];这个时候该控件的counter已经自动加一了
@property (weak) SomeClass * aObject;
对应原来的
@property (assign) SomeClass * aObject;
__weak, __strong 用来修饰变量,此外还有 __unsafe_unretained, __autoreleasing 都是用来修饰变量的。
__strong 是缺省的关键词。
__weak 声明了一个可以自动 nil 化的弱引用。
__unsafe_unretained 声明一个弱应用,但是不会自动nil化,也就是说,如果所指向的内存区域被释放了,这个指针就是一个野指针了。
__autoreleasing 用来修饰一个函数的参数,这个参数会在函数返回的时候被自动释放。
在arc模式下只能使用weak 和 strong,非arc模式下使用retain和assign,其实两者是相等的。
原子性和非原子性用于线程同步时是否加锁,此处不做阐述