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

在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修饰符变量的对象在通过该变量使用时,必须确保其确实存在,否则将会引起程序崩溃。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码匠的流水账

聊聊HystrixThreadPool

hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/HystrixThreadPool.java

771
来自专栏Hadoop数据仓库

Oracle sqlldr 如何导入一个日期列

1. LOAD DATA INFILE * INTO TABLE test FIELDS TERMINATED BY X'9' TRAILING NULLCO...

1786
来自专栏MelonTeam专栏

Bitmap 源码阅读笔记

导语: Android 系统上的图片的处理,跟Bitmap 这个类脱不了关系,我们有必要去深入阅读里面的源码,以便在工作中能更好的处理Bitmap相关的问题...

2498
来自专栏码匠的流水账

java9系列(五)Stack-Walking API

java9新增这个类的目的是提供一个标准API用于访问当前线程栈,之前只有Throwable::getStackTrace、Thread::getStackTr...

421
来自专栏专知

2018年SCI期刊最新影响因子排行,最高244,人工智能TPAMI9.455

2018年6月26日,最新的SCI影响因子正式发布,涵盖1万2千篇期刊。CA-Cancer J Clin 依然拔得头筹,其影响因子今年再创新高,达244.585...

1282
来自专栏linux驱动个人学习

高通msm8909耳机调试

1、DTS相应修改: DTS相关代码:kernel/arch/arm/boot/dts/qcom/msm8909-qrd-skuc.dtsi: 1 s...

7475
来自专栏Ryan Miao

ehcache报错

jfinal2.0+tomcat7+ehcache2.6.11+Linux Linux version 2.6.18-164.el5 (mockbuild@x8...

3729
来自专栏Petrichor的专栏

Dataset 列表:机器学习研究

In computer vision, face images have been used extensively to develop face recog...

1481
来自专栏余生开发

echarts太阳分布图-饼图来回穿梭

var dom = document.getElementById("container");

1172
来自专栏增长技术

App Guide相关

##TourGuide https://github.com/worker8/TourGuide

702

扫码关注云+社区