本文主要是针对 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
网友评论