【发布时间】:2012-02-26 07:46:08
【问题描述】:
我想知道如何在方法的上下文中访问__block 合格的线程安全变量。
例子:
__block NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
for (int i=0; i<20; i++) {
NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
[dictionary setObject:@"test" forKey:@"test"];
}];
[someConcurrentQueue addOperation:operation];
}
这里操作被添加到并发队列中,dictionary 变量可能是
同时从不同的线程访问。
这样安全吗?如果没有,我该如何安全地访问dictionary?
【问题讨论】:
-
我不相信
__block在这里是必要的,因为您没有更改dictionary所指的内容,只是对象的内部属性。我不确定您的并发问题,缺少简单地使用串行队列或将不安全操作包装在另一个分派到单个串行队列的块中的明显解决方案。
标签: objective-c cocoa-touch cocoa objective-c-blocks cocoa-design-patterns