簡體   English   中英

在這種情況下,dispatch_async(dispatch_get_main_queue(),...)是否必要?

[英]Is dispatch_async(dispatch_get_main_queue(), …) necessary in this case?

我遇到了這段代碼,我無法弄清楚作者為什么會這樣做。 看看這段代碼:

someMethodStandardMethodUsingABlock:^() {
    dispatch_async(dispatch_get_main_queue(), ^{
        [[NSNotificationCenter defaultCenter] postNotificationName:"notif" object:nil];
    });
}];

我有一個帶有完成塊的方法,在這個塊中必須發布通知。 我不太明白為什么在這種情況下主隊列上的dispatch_async是必要的。 該塊已經在主線程上運行,即使不是,我也不認為它會真的重要嗎? 我只想寫下這個:

someMethodStandardMethodUsingABlock:^() {
    [[NSNotificationCenter defaultCenter] postNotificationName:"notif" object:nil];
}];

它確實在我的測試中起作用。

如果你能幫助我闡明一下,我真的很感激!

馬特

NSNotificationCenter類參考中的這兩句話表明了幾個可能的原因:

通知中心同步向觀察者發送通知。 換句話說,postNotification:方法在所有觀察者都收到並處理通知之前不會返回。

...

在多線程應用程序中,通知始終在發布通知的線程中傳遞,這可能與觀察者注冊自己的線程不同。

因此,或許(a)作者不希望代碼在所有觀察者處理通知之前阻塞,和/或(b)他想確保觀察者方法在主線程上運行。

有時您需要運行異步觸發某些執行的方法並立即返回。 例如,某些AppDelegate '關鍵'方法(如applicationDidBecomeActiveapplicationDidEnterBackground )需要執行並快速返回,因此操作系統不會終止您的應用程序。

我不知道你的問題是否屬於這種情況,但這可能是對dispatch_async使用的一種解釋。

暫無
暫無

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

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