簡體   English   中英

dispatch_get_main_queue塊中的代碼

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM