gpt4 book ai didi

ios - Objective-C 中的 Dispatch_sync 或完成 block 差异

转载 作者:行者123 更新时间:2023-11-29 02:25:02 27 4
gpt4 key购买 nike

我正在与 GCD 和 block 作斗争。我正在尝试创建一系列需要前一个数据的方法。我正在考虑两种不同的方法来实现它。

  1. dispatch_sync 串行队列
  2. 嵌套完成 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/

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