前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深入的理解属性的修饰符(理论篇)

深入的理解属性的修饰符(理论篇)

作者头像
大壮
发布2018-06-19 13:25:49
5360
发布2018-06-19 13:25:49
举报
文章被收录于专栏:大壮大壮

在ARC有效时,其类型上必须附加所有权修饰符,用来管理属性在内存中的生命周期。 所有权修饰符一共4种,

______strong ______weak ______unsafe_unreationed __autoreleasing

属性声明的属性

所有权修饰符

assign

__unsafe_unreationed 修饰符

copy

__strong 修饰符 (但是赋值得是被复制的对象)

reatin

__strong 修饰符

strong

__strong 修饰符

unsafe_unreatined

__unsafe_unreationed 修饰符

weak

__weak 修饰符

然后在声明成员变量时,如果同属性声明中的属性不一致就是引起编译错误。例如:

** 错误声明,同属性声明中的属性不一致 ** <pre> @property (nonatomic,weak) id obj;</pre>

** 正确声明 ** <pre>@property (nonatomic,weak) id __weak obj; //或者 @property (nonatomic,strong) id obj;</pre>

然后分别详细说明所有权修饰符的使用

__strong

__strong修饰符是 id类型 和 对象类型 的默认所有权修饰符。 <pre> id obj = [[NSObject alloc] init]; 等于 id __strong obj = [[NSObject alloc] init]; </pre>

__weak

因为带有______strong 修饰符的成员变量在持有对象时,很容易发生循环引用,循环引用很容易导致内存泄漏(既应当废弃的对象在超出其生存周期后继续存在)。所以苹果引入了 ______weak修饰符。 1.若附有______weak修饰符的变量所引用的对象被废弃,则将nil赋值给该变量。 2.使用附有____weak修饰符的变量,即是使用组成到autoreleasepool中的对象。 通过上面2特性,使用__weak修饰符可避免循环引用。并且检查附有__weak修饰符的变量是否为nil,可以判断被赋值的对象是否已废弃。

__unsfe_unretained 修饰符

______unsfe_unretained修饰符是不安全的所有权修饰符,并且附有__unsfe_unretained修饰符的变量不属于编译器的内存管理对象。 然后在iOS4 以及 OS X Sonw Leopard 的应用程序中,必须使用__unsfe_unretained修饰符来替代__weak修饰符。并且注意一点是,赋值给附有__unsfe_unretained修饰符变量的对象在通过该变量使用时,必须确保其确实存在,否则将会引起程序崩溃。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.02.26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 然后分别详细说明所有权修饰符的使用
    • __strong
      • __weak
        • __unsfe_unretained 修饰符
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档