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

标签 objective-c ios memory-management nsmutablearray nsarray

@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/

相关文章:

objective-c - 如何包含静态库并使其#import路径仍然有效?

ios - _NSInlineData base64EncodedString - 发送到实例的无法识别的选择器

ios - 如何在不同的 iOS 设备上为 UINavigationBar 设置背景图片

ios - UICollectionView 的大小有时是错误的

java - 简单的 Android 应用程序即将 OOM

iphone - 指向 iphone 应用程序 SSL 连接的好教程的指针?

iPhone:RegexKit 与 RegexKit lite - 遍历数组需要很长时间

ios - 在 Deprecated sizeWithFont :minFontSize:actualFontSize to get the change in font size? 中复制 actualFontSize 指针返回

javascript - 通过原型(prototype)定义方法与在构造函数中使用它相比——真的有性能差异吗?

c - 如何使用 memcpy 交换两个对象的部分?