关于iOS基本属性修饰符的理解(nonatomic等)

本文主要是针对 readwrite、readonly、nonatomic、atomic等四个属性做简单描述

readwrite和readonly主要是针对属性的读写权限
readwrite:可读可写
readonly:只读,也可以使用KVC修改属性的值
注意:当重写了+ (BOOL)accessInstanceVariablesDirectly方法,且返回NO,就不能修改readonly的属性值了,会crash

nonatomic、atomic主要是针对线程安全
nonatomic:非原子性,线程不安全,系统在生成setter和getter方法的时候不会添加线程锁
atomic:原子性,线程安全,系统在生成setter和getter方法的时候添加线程锁,但是很耗时

这里会有一个面试题:

atomic是绝对的线程安全吗??!

答案肯定是否,为什么呢?
atomic属性修饰符,系统在为属性生成setter和getter方法的时候会自动加线程锁,但是这个锁只是针对属性的读写操作
eg:当A线程执行set操作的时候,B线程release了这个属性,这个时候就会crash

你可能感兴趣的:(关于iOS基本属性修饰符的理解(nonatomic等))