我正在与 GCD 和 block 作斗争。我正在尝试创建一系列需要前一个数据的方法。我正在考虑两种不同的方法来实现它。
- dispatch_sync 串行队列
- 嵌套完成 block
您不认为以下 2 个选项返回相同的值吗?据我在 Apple 的 dispatch queues 中所读, DISPATCH_QUEUE_SERIAL
按 FIFO 顺序运行。所以这两个选项应该返回相同的值。
我在这里做错了什么?哪个是最好的方法? 感谢您的帮助!
//Option 1
dispatch_queue_t delete_queue = dispatch_queue_create("delete_queue", DISPATCH_QUEUE_SERIAL);
dispatch_sync(delete_queue, ^{
[self dosomething];
});
dispatch_sync(delete_queue, ^{
[self dosomething2];
});
dispatch_sync(delete_queue, ^{
[self dosomething3];
});
//Option 2
-(void)dosomething1:(dispatch_block_t)completion;
-(void)dosomething2:(dispatch_block_t)completion;
-(void)dosomething3:(dispatch_block_t)completion;
[self dosomething:^{
[self dosomething2:^{
[self dosomething3:^{}];
}];
}];
-(void)dosomething:(dispatch_block_t)completion {
/*method logic here*/
completion();
}
-(void)dosomething2:(dispatch_block_t)completion {
/*method logic here*/
completion();
}
-(void)dosomething3:(dispatch_block_t)completion {
/*method logic here*/
completion();
}
最佳答案
您显示的两个代码示例都等同于:
[self dosomething];
[self dosomething2];
[self dosomething3];
换句话说,这两种方式都是按顺序同步执行方法,并阻塞线程直到完成。
此外,正如 Ken Thomases 所说,您的方法都没有“返回”任何东西,因此您关于返回的问题没有意义。
关于ios - Objective-C 中的 Dispatch_sync 或完成 block 差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27665443/