![](/img/trans.png)
[英]weakself inside dispatch_async queue(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
'關鍵'方法(如applicationDidBecomeActive
或applicationDidEnterBackground
)需要執行並快速返回,因此操作系統不會終止您的應用程序。
我不知道你的問題是否屬於這種情況,但這可能是對dispatch_async
使用的一種解釋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.