变量限定符
ARC为变量提供了四种生命周期限定符.
__strong
默认限定符(可省略,无需显式引入),表示对指定(双重含义:①特定的;②指针变量指向的)的对象有强引用.
-
__weak
- 表示对指定的对象具有弱引用,弱引用没有保持引用对象存活的功能,当没有强引用指向对象时,对象会被回收,弱引用会自动被置为nil(__weak所具有的安全性).
- 主要用于防止
Block
中的循环引用.
__weak typeof(self) weakSelf = self;
__unsafe_unretained
- 极少使用,为兼容iOS5以下版本的产物,可以理解成MRC下的assign)
- 与
__weak
类似,只是当没有强引用指向对象时,__unsafe_unretained修饰的指针不会被置为nil.
__autoreleasing
- 极少使用
- 常用于修饰使用
id *
传递的消息参数,它表示autorelease
方法会在传递参数的方法中被调用.
变量限定符的使用格式(使用语法)
// 类名 * 变量限定符 变量名 TypeName * qualifier variable
变量限定符的使用示例
// 对象创建后引用计数为1,对象在p1的引用期间不会被回收. Person * __strong p1 = [Person alloc] init]; // 对象创建后引用计数为0,对象会被立即释放,且p2将被设置为nil. Person * __weak p2 = [Person alloc] init]; // 对象创建后引用计数为1(别问我,我也很懵逼,如果你有想法,记得告诉我),对象会被立即释放,但p3将被设置为nil. Person * __strong p3 = [Person alloc] init]; // 对象创建后引用计数为1,当方法返回时对象会被立即释放. Person * __strong p4 = [Person alloc] init];
Others
- 将一个对象作为参数传递给某个方法,相当于在这个方法中,把这个对象赋值给了一个名为形参的指针变量.