readWrite:
这个实在没什么可说的,默认的修饰词就是readWrite,代表可读可写
二、nonatomic、atomic
我们先看一下官方文档
苹果官网对两者的说法
atomic:
默认的属性修饰词,按官方文档上说即使从不同的线程通过getter或setter方法去访问属性也能完全的获取到或设置值,从这里也可以看出,atomic并不是线程安全的,因为atomic只能保证通过setter和getter方法能获取到一个完整的value,如果A线程在getter,B、C线程在setter,可能A获取到的值是BC执行之后的值,也可能是BC线程执行完之前的值,也可能是B C线程任何一个线程执行完的值。
因此atomic的伪代码大概如下:
- (void)setString:(NSString *)string{
@synchronized(self) {
if (_string != string) {
[_string release];//MRC
_string = [string copy];
}
}
}
- (NSString *) string{
@synchronized(self) {
return _ string;
}
}
nonatomic:
相对而言,通过nonatomic修饰的属性,并没有做锁的操作,多线程同时进行setter/getter操作,并不能保证得到一个完整的value,所以相对atomic来说nonatomic修饰的属性访问速度更快,而且平时对线程安全我们更倾向于使用信号量、NSLock和synchronized去控制线程安全,他们都能保证代码块的原子性,所以几乎所有的属性都用nonatomic去修饰。











