簡體   English   中英

主線程中的di​​spatch_get_main_queue()

[英]dispatch_get_main_queue() in main thread

我有一些方法可以在某些情況下改變UI。

例如:

-(void) myMethod {

  if(someExpressionIsTrue) {
    // make some UI changes
    // ...
    // show actionSheet for example
  }
}

有時myMethod有時是從mainThread調用來自other thread一些other thread

這就是為什么我希望在mainThread確實執行這些UI更改。

我用這種方式改變了myMethod所需的部分:

if(someExpressionIsTrue) {
     dispatch_async(dispatch_get_main_queue(), ^{
        // make some UI changes
        // ...
        // show actionSheet for example
      });
}

所以問題:

  • 在主線程中 調用 dispatch_async(dispatch_get_main_queue() 是否安全且良好的解決方案 ?它是否會影響性能?
  • 這個問題可以用另一種更好的方式解決嗎? 我知道我可以使用[NSThread isMainThread]方法檢查它是否是主線程,並且僅在其他線程的情況下調用dispatch_async ,但它將使我創建一個具有這些UI更新的方法或塊。

在主隊列中從主隊列中添加異步塊沒有問題,它所做的就是稍后在運行循環中運行該方法。

你絕對不想做的是調用dispatch_sync從主隊列中向主隊列添加一個塊,因為你最終會鎖定自己。

如果您在主線程中調用dispatch_async,請不要擔心。 iOS會將塊放入隊列並在主線程中執行塊。

暫無
暫無

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

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