姬長信(Redy)

[底层原理]关于iOS中property修饰符个人的一点理解

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

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

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

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

1.原子性

atomic VS nonatomic

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

使用nonatomic修饰dataArray,会崩溃