gpt4 book ai didi

ios - 如何在 Objective-C 中正确同步对实例变量的访问

转载 作者:行者123 更新时间:2023-11-29 10:40:19 25 4
gpt4 key购买 nike

我想在 Objective-C 中同步访问 BOOL 类型的实例变量。我可以对非属性数据成员使用 atomic 还是应该在这种情况下使用 @synchronized

提前致谢。

最佳答案

如果您不想使用属性,同步访问 BOOL 的最有效方法就是使用内存屏障。

在每次读取变量之前,调用__sync_synchronize();。每次写入后,也调用 __sync_synchronize();。这比 @synchronized 快得多,但对于 BOOLshortint 它同样安全。 (在 64 位平台上,这也适用于 64 位整数。但是不要将此方法用于对象指针!)

示例代码:

__sync_synchronize();
if(_myFlag) {
showUserAlert(@"my flag is set!!! OMG!");
}
//...
if(self.userWantsFlags) {
_myFlag = YES;
__sync_synchronize();
}

当然,您也可以通过定义一个atomic 属性来封装此行为,并使用它代替实例变量...

另请参阅:more info on atomic builtins

关于ios - 如何在 Objective-C 中正确同步对实例变量的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24843468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com