gpt4 book ai didi

iOS:如何让我的 block 在不相互干扰的情况下执行?

转载 作者:行者123 更新时间:2023-11-28 20:31:39 25 4
gpt4 key购买 nike

我有一个尝试创建的过程,我在其中下载不同的 xml 文件并从网站解析它们。目前我可以通过使用...让他们完成所有工作

dispatch_async(dispatch_get_current_queue(),^ { [self updatePersons]; });
dispatch_async(dispatch_get_current_queue(),^ { [self updatePlaces]; });
dispatch_async(dispatch_get_current_queue(),^ { [self updatePositions]; });
dispatch_async(dispatch_get_current_queue(),^ { [self updateContacts]; });

这会锁定主线程,因为我正在使用 dispatch_get_current_queue。我怎样才能让它们在不互相干扰的情况下执行,这在尝试下面的方法时似乎就是这种情况。

dispatch_async(dispatch_get_global_queue(0,0),^ { [self updatePersons]; });

我正在使用的代码的完整版本如下,但是根据我的日志输出,它们是同时执行的(如果我理解一切正确,我得到的就是目的);然而,它们的代码从未真正完成……我无法判断是否所有内容都通过日志输出进行了解析,并且主屏幕保持卡住状态。日志只显示了它应该显示的部分日志...似乎被其他进程的 NSLog 消息打断了。

dispatch_async(dispatch_get_global_queue(0,0),^ { [self updatePersons]; });
dispatch_async(dispatch_get_global_queue(0,0),^ { [self updatePlaces]; });
dispatch_async(dispatch_get_global_queue(0,0),^ { [self updatePositions]; });
dispatch_async(dispatch_get_global_queue(0,0),^ { [self updateContacts]; });

dispatch_async(dispatch_get_global_queue(-2,0),^ {

dispatch_async(dispatch_get_main_queue(),^ {[self setBottomBarToUpdated]; });
});

我正在尝试创建一种方法,让应用程序通过上述每个功能提取信息,同时通过底部栏上的标签向用户更新进度。通过在四个函数中的每一个中使用以下代码,我似乎可以很好地更新文本...

dispatch_async(dispatch_get_main_queue(),^ {
[self setBottomBarToUpdating:@"Updating Places..."];
});

如果有人可以提供有关正确使用队列的帮助,这样我的应用程序就不会锁定,我将不胜感激。谢谢!

最佳答案

如果您创建自己的私有(private)并发调度队列,那么您可以使用“障碍 block ”。只有当所有其他先前提交的 block 都完成时,才会执行此 block 。

dispatch_queue_t queue = dispatch_queue_create("myQueue", DISPATCH_QUEUE_CONCURRENT);

// These blocks are executed concurrently:
dispatch_async(queue, ^ { [self updatePersons]; });
dispatch_async(queue, ^ { [self updatePlaces]; });
// ...

dispatch_barrier_async(queue, ^ {
// This will be executed when all previous blocks are finished.
dispatch_async(dispatch_get_main_queue(), ^{
[self setBottomBarToUpdated];
});
});

关于iOS:如何让我的 block 在不相互干扰的情况下执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11954074/

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