gpt4 book ai didi

objective-c - 使用@synchronized 的正确方法是什么?

转载 作者:技术小花猫 更新时间:2023-10-29 11:13:32 25 4
gpt4 key购买 nike

@property (atomic, retain) NSArray *array;

我不覆盖数组的 setter 和 getter。我可以使用@synchronized(array){} 或@synchronized(self.array){}。据我所知,所有情况都是正确的,对吗?

最佳答案

使用@syncrhonized(obj) 只是形成一个锁,这样其他在obj 上同步的代码就不会同时执行。

原子属性的工作原理是不允许在访问属性时进行更改;它们为访问提供隐式锁定

array = someObject.array; //locked
[array doSomething]; //no longer locked

您不能覆盖 atomic 属性的 getter 和 setter,但是在 getter/setter 周围使用 @sycnronized 指令应该足够了。

@synthesize array=_array;

...

-(void)setArray
{
@synchronized(self)
{
_array = array;
}
}

-(NSArray *)array
{
NSArray *retVal;

@synchronized(self)
{
retVal = _array;
}

return retVal;
}

老实说,除非你正在做一些严肃的多线程编程,否则原子属性是不必要的,只会导致性能下降。

关于objective-c - 使用@synchronized 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10502371/

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