美文网首页
变量限定符

变量限定符

作者: 兵哥哥k | 来源:发表于2019-01-12 17:48 被阅读0次

    ARC 为变量供了四种生命周期限定符。

    __strong

    这是默认的限定符,无需显示引入。只要有强引用指向,对象就会长时间驻留在内存 中。可以将 __strong 理解为 retain 调用的 ARC 版本。

    __weak

    这表明引用不会保持被引用对象的存活。当没有强引用指向对象时,弱引用会被置为 nil。可将 __weak 看作是 assign 操作符的 ARC 版本,只是对象被回收时,__weak 具有 安全性——指针将自动被设置为 nil。

    __unsafe_unretained

    与 __weak 类似,只是当没有强引用指向对象时,__unsafe_unretained 不会被置为 nil。 可将其看作 assign 操作符的 ARC 版本。

    __autoreleasing

    __autoreleasing用于由引用使用id *传递的消息参数。它预期了autorelease方法会 在传递参数的方法中被调用。

    Person * __strong p1 = [[Person alloc] init];// 创建对象后引用计数为 1,并且对象在 p1 引用期间不会被回收。
    Person * __weak p2 = [[Person alloc] init];// 创建对象后引用计数为 0,对象会被立即释放,且 p2 将被设置为 nil。
    Person * __unsafe_unretained p3 = [[Person alloc] init];// 创建对象后引用计数为 1,对象会被立即释放,但 p3 不会被设置为 nil。
    Person * __autoreleasing p4 = [[Person alloc] init];// 创建对象后引用计数为 1,当方法返回时对象会被立即释放。
    

    相关文章

      网友评论

          本文标题:变量限定符

          本文链接:https://www.haomeiwen.com/subject/ukpcdqtx.html