[英]Understanding the below code
我只是嘗試下面的代碼
dispatch_async(dispatch_get_main_queue(), ^{
[self taskB];
});
[self performSelectorOnMainThread:@selector(taskA) withObject:nil waitUntilDone:NO];
此taskA
和taskB
執行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.