如何用更有效的东西替换这个@synchronized(自我)代码?

时间:2011-10-16 12:53:49

标签: 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),而是使用更高效的东西。

那么这种巫毒魔法在这种情况下看起来怎么样?

1 个答案:

答案 0 :(得分:3)

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

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

但是,最重要的是你可以在自己的应用程序中进行衡量。

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