Ios 单线程安全设置器
我有一个singleton类,我通过执行以下操作来确保它是一个singleton类Ios 单线程安全设置器,ios,objective-c,ios7,Ios,Objective C,Ios7,我有一个singleton类,我通过执行以下操作来确保它是一个singleton类 static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ 如前所述。现在我需要添加一个 NSMutableDictionary *selections 属性,应用程序的其他部分肯定会更新(添加、读取键/值对)。 所以我的问题是如何确保这个属性是线程安全的? 宣布它是原子的? 我需要使它的setters和getter线程安全!。 我是一
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
如前所述。现在我需要添加一个
NSMutableDictionary *selections
属性,应用程序的其他部分肯定会更新(添加、读取键/值对)。
所以我的问题是如何确保这个属性是线程安全的?
宣布它是原子的?
我需要使它的setters和getter线程安全!。
我是一名来自C#/Java背景的objective C程序员,这就是为什么我对这个问题有点困惑的原因
谢谢线程安全和异常安全的方法是使用
@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);
}
}
您还可以将GCD与dispatch_queue一起使用,以序列化选择操作
__block NSDictionary *copiedSelection;
[[Singleton singleton] withSelection:^(NSMutableDictionary *selection) {
// you can modify selection safely here
copiedSelection= [selection copy];
}];
// you can use copiedSelection here