簡體   English   中英

了解以下代碼

[英]Understanding the below code

我只是嘗試下面的代碼

dispatch_async(dispatch_get_main_queue(), ^{
        [self taskB];
    });

[self performSelectorOnMainThread:@selector(taskA) withObject:nil waitUntilDone:NO];

taskAtaskB執行NSLog ,僅此而已。 現在,這里的taskB首先寫入,而taskA首先執行。 即使我更改順序,仍然首先執行performSelectorOnMainThread 對於每種情況,我的控制台都會顯示

2015-03-17 16:44:35.157 TestProject[9346:191978] Task A
2015-03-17 16:44:35.283 TestProject[9346:191978] Task B

誰能幫助我了解這里發生的事情。 以及為什么首先執行performSelectorOnMainThread

dispatch_async(dispatch_get_main_queue(), ^{
        [self taskB];
    });

在此代碼中,您正在使用dispatch_async ,它告訴編譯器不要停止對其內編寫的代碼的進一步執行,因此,編譯器將繼續執行performSelectorOnMainThread ,然后編譯器考慮該dispatch 在此處閱讀有關Dispatch(GCD)的更多信息。

您正在使用dispatch_async啟動異步任務,該任務不能保證立即執行。

但是另一方面,您告訴主隊列(通常是生命周期中的默認隊列)要執行任務A。

因此,每當代碼運行時,該塊將被異步跳過,並繼續執行任務A。在該任務結束后,任務B將被異步啟動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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