1

假设有一个名为 -aString 的字符串

@property (atomic, retain) NSString *aString;

所以现在假设线程 A 正在使用 aString,此时线程 B 正在尝试访问 aString。我知道由于 aString 属性是原子的,线程 B 将无法访问它,但我的问题是线程 B 的访问请求是否被取消,或者它的请求将在线程 A 完成执行后执行。

谢谢你的回复。

4

1 回答 1

1

线程 B 将等到线程 A 完成读取属性内容。

当你访问一个属性时没有别的东西会调用该属性的getter方法,如果是原子的则意味着getter方法的访问受到互斥锁的保护,所以直到getter方法不返回所有其他试图访问该属性的线程物业正在等待。

如果你重写了属性的 getter/setter,你有责任在方法体中实现线程同步,否则属性将不再是原子的

于 2013-06-17T11:10:46.963 回答