我有一个原子保留属性的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),而是使用更高效的东西。
那么这种巫毒魔法在这种情况下看起来怎么样?
答案 0 :(得分:3)
这篇文章的结论是pthread_mutex是最快的。它也有代码示例。
http://www.cocoadev.com/index.pl?NSLockVsSynchronized
但是,最重要的是你可以在自己的应用程序中进行衡量。
另外,测量最简单的方法:@synthesize(atomic,retain)属性。那当然会有最少的代码,你不必在编译器中优化代码时维护代码 - 你可以免费获得它们的优化。