gpt4 book ai didi

ios - 使用 Blocks 和 GCD 管理任务

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

我正在学习 iOS,当谈到 GCD 时,它很令人困惑。让我们把它放在一边,我正在编写一个从互联网获取数据的小程序。这是我的 View Controller

NSMutableArray dataArray = [NSMutableArray array];

[querysomethingwithblock:(^ {
//do some stuff here
[otherquerywithblock:( ^ {
//do some stuff here
// Here I got the data from internet
// Do loop action
[dataArray addObject:data];
})];


})];
// here I want to perform some actions only after get data from internet
[self performAction:dataArray];

如何才能达到这个目的。实际上,[self PerformAction:dataArray] 总是在我获取数据之前被解雇。我尝试使用 GCD 进行游戏,但没有成功。

这是我迄今为止尝试过的一些模式

dispatch_async(queue, ^{
// Do query stuff here
dispatch_async(dispatch_get_mainqueue(), ^{
//perform action here
});
{;

或使用dispatch_group_asyncdispatch_group_waitdispatch_group_notify

我现在可以处理的唯一方法是使用dispatch_after,但关键是下载时间是可变的,在这里指定具体时间并不是一个好的做法

非常感谢您的建议。

最佳答案

名为Do query stuff here的代码部分我假设已经是异步的,为什么要把它放在dispatch_queue中呢?

如果您设法执行同步查询,您的代码(第二个片段)将起作用,因为只有在查询完成后才会执行对主队列的分派(dispatch)。

如果您没有以同步方式执行查询的选项,那么您需要某种机制来注册下载完成时要执行的 block 或回调。

归根结底,这完全取决于您的查询类型以及它为您提供什么方法​​来注册下载完成后要执行的操作。

关于ios - 使用 Blocks 和 GCD 管理任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18899423/

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