![](/img/trans.png)
[英]Is GCD's dispatch_get_main_queue allowed when inside a block?
[英]code inside dispatch_get_main_queue block
我有一些如下代碼:
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"1");
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"3");
});
NSLog(@"2");
}
在控制台中,控制台輸出為: 1, 2, 3
。 起初我以為應該是1, 3, 2
因為dispatch_get_main_queue
是主隊列,而外面是主隊列。 為什么輸出不同?
dispatch_async
意思是“在該隊列有能力的情況下,將該塊提交到指定的隊列上運行,但不要阻塞當前線程,以等待所分配的塊完成,而要立即進行。” 而且由於viewDidLoad
在主線程上運行,因此主線程將在完成運行viewDidLoad
之前,先運行異步分發給主隊列的塊。
您可以使用dispatch_async在NSLog(3)中調度代碼,這將使代碼在當前同步函數完成后異步執行。
我建議閱讀特別是關於Threading in General和GCD的教程,因為SO不能也不應完全涵蓋這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.