簡體   English   中英

使用dispatch_get_main_queue()是否意味着我的代碼將在主線程上?

[英]Does using dispatch_get_main_queue() mean that my code will be on the main thread?

以下代碼是否在主線程上運行? “主隊列”是指主線程嗎?

dispatch_async(dispatch_get_main_queue(),
^{
   // Some code
});

dispatch async vs sync的異步部分與並發vs serial不同。 異步意味着函數立即返回,同步意味着它將一直等到塊執行。 由於主線程/隊列是串行的,所以事情將按順序執行 - 我相信這意味着因為你要求它在你發送的同一個線程上進行異步調度,它會立即返回,等到當前運行循環的結束和隊列中的任何其他內容,然后執行您的塊。

這對於隊列內部而言比在主線程上更有用 - 您可以處理數據,讓UI知道更新,並繼續處理而無需等待所有內容重繪等。這就是為什么您經常會看到dispatch_async調用另一個dispatch_async(並發隊列)中的主線程,而不僅僅是dispatch_sync。

是。 來自Apple開發者網站

調度框架為應用程序提供了一個默認的串行隊列。 可以通過dispatch_get_main_queue()訪問此隊列。

這在多個地方都有記錄,包括dispatch_get_main_queue()本身文檔 並發編程指南說:

主調度隊列是一個全局可用的串行隊列,它在應用程序的主線程上執行任務。

暫無
暫無

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

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