作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在 Objective-C 中同步访问 BOOL 类型的实例变量。我可以对非属性数据成员使用 atomic 还是应该在这种情况下使用 @synchronized
?
提前致谢。
最佳答案
如果您不想使用属性,同步访问 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
属性来封装此行为,并使用它代替实例变量...
关于ios - 如何在 Objective-C 中正确同步对实例变量的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24843468/
我是一名优秀的程序员,十分优秀!