objective-c - 如何用更高效的东西替换这个@synchronized(self) 代码?

标签 objective-c ios

我有这个 getter/setter 对用于原子保留属性:

- (FileManager*)fileManager {
    @synchronized(self) {
        if (fileManager) {
            return fileManager;
        }

        FileManager *fm = [[FileManager alloc] init];
        self.fileManager = fm;
        [fm release];

        return fileManager;
    }
}
- (void)setFileManager:(FileManager *)newFileManager {
    @synchronized(self) {
        [fileManager release];
        fileManager = [newFileManager retain];
    }
}

现在有人说@synchronized(self) 很慢而 NSLock 快很多。他还说,通常使用的魔术 @synthesize 实现不使用 @synchronize(self),而是使用效率更高的东西。

那么在这种情况下,这个伏都教魔法应该是什么样子的?

最佳答案

这篇文章的结论是 pthread_mutex 是最快的。它也有代码示例。

http://www.cocoadev.com/index.pl?NSLockVsSynchronized

但是,最重要的是让您在自己的应用中进行衡量。

另外,测量最简单的方法:@synthesize (atomic, retain) 属性。那当然会有最少的代码,并且当他们在编译器中优化它时您不必维护代码 - 您将免费获得他们的优化。

关于objective-c - 如何用更高效的东西替换这个@synchronized(self) 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7784379/

相关文章:

ios - 处理 IOS 设置更改的正确方法

ios - 基本的 Objective C 语法

ios - 如何使用performSelector进行对象值分配

ios - 在不停止 f.e. 的情况下在后台使用 AVSpeechSynthesizer音乐应用

ios - 在 Swift 中获取图像名称 UIImagePickerController

objective-c - 核心剧情: number of major x intervals

ios - 必须在另一个线程中使用 dispatch_semaphore_t 吗?

ios - iBeacon App 有时只能工作,传输从不工作在 iPhone 5

ios - 你的 plist 应该包含 <string></string> 吗?

ios - 删除 NSMutableArray 内的 NSMutableDictionary 内的 <null>