我有一个单例类,我通过
确保它是一个单例static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
如前所述。现在我需要添加一个
NSMutableDictionary *selections
该单例的属性,应用程序的其他部分肯定会更新(添加,读取键/值对)。 所以我的问题是如何确保此属性是线程安全的? 声明原子? 我需要让它的安装者和getter线程安全! 我是最近从C#/ Java背景来的C程序员,这就是为什么我对这个问题感到有点困惑。
由于
答案 0 :(得分:1)
线程安全且异常安全的方法是使用@synchronized
来执行锁定
@property (readonly) NSMutableDictionary *selections;
- (void)withSelection:(void (^)(NSMutableDictionary *))callback {
if (!callback) return;
@synchronized(self.selection) { // you need to make sure self.selection isn't nil
callback(self.selection);
}
}
__block NSDictionary *copiedSelection;
[[Singleton singleton] withSelection:^(NSMutableDictionary *selection) {
// you can modify selection safely here
copiedSelection= [selection copy];
}];
// you can use copiedSelection here
您还可以使用带有dispatch_queue的GCD来序列化选择
上的操作