我想在Objective-C中同步对BOOL类型的实例变量的访问。我可以对非属性数据成员使用atomic吗?在这种情况下我应该使用@synchronized
吗?
提前致谢。
答案 0 :(得分:1)
如果您不想使用某个属性,那么同步BOOL
访问权限的最佳方式就是使用内存屏障。
在每次读取变量之前,请致电__sync_synchronize();
。每次写入后,也请致电__sync_synchronize();
。这比@synchronized
快得多,但对于BOOL
,short
或int
,它同样安全。 (在64位平台上,这也适用于64位整数。不过不要使用这种方法和对象指针!)
示例代码:
__sync_synchronize();
if(_myFlag) {
showUserAlert(@"my flag is set!!! OMG!");
}
//...
if(self.userWantsFlags) {
_myFlag = YES;
__sync_synchronize();
}
您当然也可以通过定义atomic
属性来封装此行为,并使用它来代替实例变量......