gpt4 book ai didi

objective-c - 在这种情况下是否需要 dispatch_async(dispatch_get_main_queue(), ...) ?

转载 作者:太空狗 更新时间:2023-10-30 03:49:36 24 4
gpt4 key购买 nike

我偶然发现了这段代码,我不太明白作者为什么这样做。看看这段代码:

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

我有一个带有完成 block 的方法,在这个 block 中必须发布一个通知。我不太明白为什么在这种情况下主队列上的 dispatch_async 是必要的。该 block 将已经在主线程上运行,即使不是,我也不认为这真的很重要,不是吗?我会简单地写这个:

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

它在我的测试中确实有效。

如果您能帮助我阐明这一点,我将不胜感激!

马特

最佳答案

NSNotificationCenter 类引用中的这两句话提​​出了几个可能的原因:

A notification center delivers notifications to observers synchronously. In other words, the postNotification: methods do not return until all observers have received and processed the notification.

...

In a multithreaded application, notifications are always delivered in the thread in which the notification was posted, which may not be the same thread in which an observer registered itself.

所以也许 (a) 作者不希望代码在所有观察者都处理完通知之前阻塞,和/或 (b) 他想确保观察者方法在主线程上运行。

关于objective-c - 在这种情况下是否需要 dispatch_async(dispatch_get_main_queue(), ...) ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9561604/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com