关于iOS中property修饰符个人的一点理解

栏目: IOS · 发布时间: 7年前

内容简介:在日常的iOS开发中,我们每天都会使用到property,但是对于property的修饰符,可能大家跟我以前一样,理解的不是特别透彻,现在就让我们来了解了解吧,首先,一个property是可以看成是:property = 实例变量+setter方法+getter方法

在日常的iOS开发中,我们每天都会使用到property,但是对于property的修饰符,可能大家跟我以前一样,理解的不是特别透彻,现在就让我们来了解了解吧,

首先,一个property是可以看成是:

property = 实例变量+setter方法+getter方法

属性修饰符会直接影响后续编译器对于setter和getter方法的合成,属性的修饰符分为以下三类:

1.原子性

atomic VS nonatomic

具备atomic特质的属性,编译器合成的setter和getter方法会加锁,能够保证当多个线程在读写属性时,总是能够获取到属性值,如果修饰符为nonatomic,则不会对setter和getter方法加锁,在通常情况下,使用nonatomic不会带来什么问题,但是如果一个线程在多次修改某个属性时,另一个线程去读取属性时,可能会取到未修改好的属性,下面我们将举例来证明:

关于iOS中property修饰符个人的一点理解

使用nonatomic修饰dataArray,会崩溃

关于iOS中property修饰符个人的一点理解

使用atomic修饰dataArray,不会崩溃

在这段代码中,我们有一个用nonatomic,strong修饰的数组dataArray,我们在一个异步队列的任务中持续地去修改这个属性,在另一个异步队列的任务中持续地去读取这个属性,由于dataArray是由strong来修饰的,那么在dataArray的setter方法中,其实是先保留新值,后释放旧值,再将指针指向新值,所以在后面这个异步队列的任务中,取到的dataArray可能是一个已经被释放的僵尸对象,所以会崩溃。

那么还有一个问题

atomic是线程安全的吗?

让我们先来了解一下线程安全的概念,

多线程操作共享数据不会出现想不到的结果就是线程安全的,否则,是线程不安全的。

下面让我们来做个小实验,

关于iOS中property修饰符个人的一点理解

对用atomic修饰的数组连续修改时,读取属性

输出结果为:

关于iOS中property修饰符个人的一点理解

输出结果

我们对在一个异步队列的任务中,对dataArray多次写入,并在另一个异步队列中多次读取dataArray,从输出结果中发现,得到的结果并不一样,所以使用atomic也并不能保证线程安全。

2.读/写权限

readwrite VS readonly

readwrite修饰的属性只会合成setter和getter方法

readonly修饰的属性只会合成getter方法,可以以直接访问实例变量的方式来完成赋值操作

3.内存管理

这方面的修饰符主要是影响编译器合成setter方法,

assign

主要修饰基础类型,使用assign修饰的属性的setter方法主要是执行简单的赋值操作

weak

weak是ARC中新增加的属性修饰符,主要定义一种“非拥有关系”,使用weak修饰的属性的setter方法会既不保留新值,也不释放旧值,不会使属性指的对象的引用计数增加,当指向的对象被释放时,属性值也会被自动置为nil。

strong

strong是ARC中新增加的属性修饰符,跟MRC时代中的retain修饰符很像,描述一种“拥有关系”,使用strong修饰的属性的setter方法会先保留新值,再释放旧值,最后把新值设置上。

unsafe_unretained

unsafe_unretained与assign类似,但是用于对象类型,从字面意思上,也能看到,它是不安全,也不会强引用对象,所以它跟weak很相似,跟weak的区别在于当指向的对象被释放时,属性不会被置为nil,所以是不安全的。

copy

copy表达的语义相似,都会持有对象,但是它的setter方法不会保留新值,而是会调用对象的copy方法将新值拷贝一份,然后将它设置上,所以使用copy修饰的类型必须遵NSCopying协议,实现-(void)copyWithZone:(NSZone *)zone方法。


以上所述就是小编给大家介绍的《关于iOS中property修饰符个人的一点理解》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Four

The Four

Scott Galloway / Portfolio / 2017-10-3 / USD 28.00

NEW YORK TIMES BESTSELLER USA TODAY BESTSELLER Amazon, Apple, Facebook, and Google are the four most influential companies on the planet. Just about everyone thinks they know how they got there.......一起来看看 《The Four》 这本书的介绍吧!

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具