0
__block int x = 5;
dispatch_queue_t abe = dispatch_queue_create([[NSString stringWithFormat:@"abe'sQueue.%@", self] UTF8String], NULL);
dispatch_sync(abe, ^{
NSLog(@"%@", [self returnSomething]);
dispatch_async(dispatch_get_main_queue(), ^{
x = 20;
});
});
NSLog(@"%d", x);
即使主线程的嵌套回调异步更改值,上面的总是会导致5是'x'的记录值。任何想法,我要去哪里错了?从调度队列主线程嵌套回调不工作?
感谢您的解释。一个快速后续问题:如果有多个这样的队列 - 并且从iOS开发库取得它们可以同时运行 - 我仍然需要包含嵌套的'dispatch_async'函数,因为肯定有些队列会运行在不同的线程上吗? – user1945991
对于标量?除了处理“正常”并发问题外,不需要另外处理。对于非标量或采取操作可能会导致UI更新?是的 - 您可能需要重新发送回主队列。取决于情况。当然,任何时候您都可以异步执行任何操作,您必须处理如何协调价值变化。 – bbum