gpt4 book ai didi

ios - 什么队列应该委托(delegate)代码运行

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:23:01 26 4
gpt4 key购买 nike

假设你有一个对象在私有(private)调度队列上做一些内部工作(对于那些不熟悉 GCD 的人来说想想线程)。该对象在其所做工作的不同时间通知其委托(delegate)人。从代码当前运行的私有(private)队列调用委托(delegate)方法是个坏主意,还是应该在更知名的队列上调用它们?如果是后者,什么队列?似乎主队列可能并不总是你想要的。

选项A

dispatch_async(private_queue, ^{
// Do some work...
[self.delegate tellItWorkWasDone:self];
});

选项B

dispatch_async(private_queue, ^{
// Do some work...
dispatch_sync(dispatch_get_main_queue(), ^{
[self.delegate tellItWorkWasDone:self];
});
});

选项 A 的优点是简单,但缺点是无论谁实现委托(delegate)方法,都将在队列上运行代码,而这些代码实际上不应该在队列上。选项 B 可能更安全,但 main_queue 只是一个例子;两者应该如何真正决定他们应该使用什么队列?

谢谢

最佳答案

我会建议选项 C,实际上:有一个专门的队列用于委托(delegate)回调除非委托(delegate)的事件必须在您的类(class)可以继续之前完成,在这种情况下使用选项 A。

如果 UI 需要更新,代理可以派发到主队列本身,不要强加给它。

关于ios - 什么队列应该委托(delegate)代码运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15941259/

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