变量限定符

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,当方法返回时对象会被立即释放。

你可能感兴趣的:(变量限定符)