在日常的iOS开发中,我们每天都会使用到property,但是对于property的修饰符,可能大家跟我以前一样,理解的不是特别透彻,现在就让我们来了解了解吧,
首先,一个property是可以看成是:
property = 实例变量+setter方法+getter方法
属性修饰符会直接影响后续编译器对于setter和getter方法的合成,属性的修饰符分为以下三类:
1.原子性
atomic VS nonatomic
具备atomic特质的属性,编译器合成的setter和getter方法会加锁,能够保证当多个线程在读写属性时,总是能够获取到属性值,如果修饰符为nonatomic,则不会对setter和getter方法加锁,在通常情况下,使用nonatomic不会带来什么问题,但是如果一个线程在多次修改某个属性时,另一个线程去读取属性时,可能会取到未修改好的属性,下面我们将举例来证明: