变量限定符

变量限定符

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

  1. 将一个对象作为参数传递给某个方法,相当于在这个方法中,把这个对象赋值给了一个名为形参的指针变量.

发表评论

邮箱地址不会被公开。 必填项已用*标注