变量限定符

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,当方法返回时对象会被立即释放。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容