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