gpt4 book ai didi

objective-c - 如何在 Objective-C/iOS 中可靠地对命令进行排序

转载 作者:行者123 更新时间:2023-11-28 18:07:16 25 4
gpt4 key购买 nike

我正在努力尝试在这里找出一些东西,并且可以使用一些指针。编写具有 Web View 的应用程序。我希望它从一定距离开始,找到用户位置,放大那个点,居中,然后添加 map 注释。

我了解这些要求中每一项的机制,但在对它们进行排序以使其按顺序发生时遇到了问题。由于 Obj-C 的并发性质,我不能依赖一个任务在下一个任务开始之前完成。

我正在寻找能够让我完成一项任务的解决方案,完成后,再执行下一项任务,依此类推。我认为这会涉及积木,但我只是在学习所有这些,它们让我头晕目眩。

如果有任何建议,我将不胜感激。提前致谢。

最佳答案

如果您使用 NSOperation和 NSOperationQueues,您可以使每个单独的操作都依赖于必须首先完成的操作。

编辑

这里大致介绍一下操作的使用方法。更多信息可以在 Operation Queues 中找到并发程序设计指南的部分。我绝对推荐您阅读这篇文章,因为我只会介绍您可以使用操作执行的一小部分操作。

首先,创建您的操作。您可以创建 block 操作,在其中提供 block ,在其中提供 Cocoa 调用的调用操作,或者您可以自己子类化 NSOperation 类并覆盖 main 来完成工作。

假设您选择 block 操作:

NSBlockOperation op1 = [NSBlockOperation blockOperationWithBlock: 
^{
// Do some work.
}];
NSBlockOperation op2 = [NSBlockOperation blockOperationWithBlock:
^{
// Do some different work.
}];
NSBlockOperation op3 = [NSBlockOperation blockOperationWithBlock:
^{
// Do yet more work.
}];

现在,您可以将这些全部放入队列中执行。

NSOperationQueue* opQueue = [[NSOperationQueue alloc] init];
[opQueue addOperation: op1];
[opQueue addOperation: op2];
[opQueue addOperation: op3];

除非您设置队列的最大并发操作数,否则这将运行所有操作,可能是并行的(取决于可用的系统资源)。假设 op3 只应在 op1 和 op2 完成后完成。您可以设置依赖关系来为关系建模(在将操作放入队列之前!)。

NSOperationQueue* opQueue = [[NSOperationQueue alloc] init];
[op3 addDependency: op1];
[op3 addDependency: op2];
[opQueue addOperation: op1];
[opQueue addOperation: op2];
[opQueue addOperation: op3];

现在 op3 只会在 op1 和 op2 完成后运行。这样做的好处在于,您设置了依赖关系,然后将所有操作插入队列并忘记它们(尽管向 op3 添加完成处理程序以告诉您它们何时完成可能是个好主意)。然后,操作系统会根据您定义的并行化和顺序来平衡负载。

关于objective-c - 如何在 Objective-C/iOS 中可靠地对命令进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10209021/

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