单身,线程安全的二传手

时间:2014-06-20 01:18:13

标签: ios objective-c ios7

我有一个单例类,我通过

确保它是一个单例
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{

如前所述。现在我需要添加一个

NSMutableDictionary *selections

该单例的属性,应用程序的其他部分肯定会更新(添加,读取键/值对)。 所以我的问题是如何确保此属性是线程安全的? 声明原子? 我需要让它的安装者和getter线程安全! 我是最近从C#/ Java背景来的C程序员,这就是为什么我对这个问题感到有点困惑。

由于

1 个答案:

答案 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来序列化选择

上的操作