iOS使用atomic一定是线程安全的吗?为什么?

- (void)setProp:(NSString *)newValue {    
  [_prop lock];    
  _prop = newValue;    
  [_prop unlock];
}

按我理解:1.此处的线程安全是就getter,setter而言的。

比如对于@property(nonatomic,copy)NSString *str; 当调用self.str = @"HELLO,GUY";
如果是多线程,在一个线程执行setter方法的时候,会涉及到字符串拷贝,另一个线程去读取,很可能读到一半的数据,也就是garbage数据。

2.另外的话,它也仅限于getter,setter时的线程安全。比如@property(atomic,strong)NSMutableArray *arr;

如果一个线程循环读数据,一个线程循环写数据,肯定会产生内存问题。因为它和setter,getter没有关系。

你可能感兴趣的:(iOS使用atomic一定是线程安全的吗?为什么?)