假设你有一个对象在私有调度队列上做一些内部工作(想想那些不熟悉 GCD 的人的线程)。该对象在其所做的工作中的不同时间通知其委托。从代码当前运行的私有队列中调用委托方法是个坏主意,还是应该在更知名的队列上调用它们?如果是后者,什么队列?似乎主队列可能并不总是您想要的。
选项 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 的好处是它简单,但缺点是实现委托方法的人将在他们确实不应该在的队列上运行代码。选项 B 可能更安全,但 main_queue 只是一个例子;两者应该如何真正决定他们应该使用什么队列?
谢谢