gpt4 book ai didi

ios - 具有多个长任务的 NSOperation

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:44:54 24 4
gpt4 key购买 nike

在我看来,NSOperation 的长时间运行任务应该在它的 main 函数中实现,一旦 NSOperation 就会触发它被添加到 NSOperationQueue

这对我来说效果很好,直到现在,我的 NSOperation 有不止一项主要任务。

第一个任务是解析文档(打开文档时应该只应用一次)。

第二个任务是将 NSData 附加到文档(可以为打开的文档调用多次)。

我能想到的唯一解决方案是将两个任务都移到 main 函数中,并在运行时决定执行哪个任务:

- (void)main
{
@autoreleasepool
{
if(firstTaskTsDone)
{
[self doSecondTask];
}
else
{
[self doFirstTask];
firstTaskTsDone = YES;
}
}
}

但我想一定有更好的方法来实现这个目标吧?

另外:如何使用并发操作获得相同的结果?

最佳答案

您应该为第二个任务创建第二个 NSOperation。您可以使用:

[secondOperation addDependency:firstOperation];

使第二个操作开始依赖于第一个操作完成。然后,您可以将这两个操作添加到 NSOperationQueue。在第二个操作中,您可以使用其 dependencies 属性访问第一个操作并提取第二个操作完成其任务可能需要的任何数据。

另一种方法是将 NSOperationQueue 配置为串行队列:

[operationQueue setMaxConcurrentOperationCount:1];

在这种情况下,您不需要设置依赖项,添加第一个和第二个 NSOperation 的顺序将决定它们的运行顺序。

如何使用并发操作获得相同的结果?

NSOperationQueueNSOperations 的主要目的是使非并发任务并发。如果您的代码尚未涉及某种并发任务,则没有理由使用并发 NSOperation

并发任务的一个常见示例是 NSURLConnection 请求。这通常包含在一个并发的 NSOperation 中,因此它可以作为一个较长过程的一部分添加到 NSOperationQueue 中,在该过程中其他 NSOperations 将被添加到处理请求结果的队列。

main 方法返回时,正常的 NSOperation 结束。如果您在 main 中异步启动 NSURLConnection,您将在连接完成之前立即返回。通过将其配置为并发操作,您负责在连接实际完成时向 NSOperationQueue 发送信号。

关于ios - 具有多个长任务的 NSOperation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15002606/

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