- atomic原子性捧弃,會(huì)對(duì)系統(tǒng)生成的setter/getter進(jìn)行加鎖操作,保證了setter/getter方法的線程安全,但是不是真正的線程安全锄奢,如果一個(gè)線程在setter或getter的同時(shí)歼冰,另一個(gè)線程執(zhí)行了release操作靡狞,則會(huì)可能直接crash;
- nonatomic非原子性隔嫡,沒有進(jìn)行加鎖甸怕,所以線程不安全,但是更快畔勤,一般在iOS系統(tǒng)使用此屬性加快執(zhí)行速度蕾各;
總結(jié):所以在iOS開發(fā)過(guò)程中,如果沒有多線程訪問(wèn)屬性的必要庆揪,則使用nonatomic屬性關(guān)鍵字式曲,如果有多線程訪問(wèn),則使用atomic/nonatomic都需要注意線程安全。
具體實(shí)現(xiàn):
/// nonatomic
@synthesize name = _name;
/// setter
- (void)setName:(NSString *)name {
if (_name != name) {
[_name release];
_name = [name retain];
}
}
/// getter
- (NSString *)name {
return _name;
}
/// atomic
@synthesize name = _name;
/// setter
- (void)setName:(NSString *)name {
@synchronized (self) {
if (_name != name) {
[_name release];
_name = [name retain];
}
}
}
/// getter
- (NSString *)name {
NSString *temp = nil;
@synchronized (self) {
temp = [[_name retain] autorelease];
}
return temp;
}