gpt4 book ai didi

ios - 实现异步NSOperation

转载 作者:行者123 更新时间:2023-12-01 16:09:20 24 4
gpt4 key购买 nike

我正在研究NSOperation对象。根据App Document( list 2-5),我们可以实现异步NSOperation。开始部分的部分如下:

- (void)start {
// Always check for cancellation before launching the task.
if ([self isCancelled])
{
// Must move the operation to the finished state if it is canceled.
[self willChangeValueForKey:@"isFinished"];
finished = YES;
[self didChangeValueForKey:@"isFinished"];
return;
}

// If the operation is not canceled, begin executing the task.
[self willChangeValueForKey:@"isExecuting"];
[NSThread detachNewThreadSelector:@selector(main) toTarget:self withObject:nil];
executing = YES;
[self didChangeValueForKey:@"isExecuting"];
}

我发现分配了一个新线程来运行主要功能:
[NSThread detachNewThreadSelector:@selector(main) toTarget:self withObject:nil];

因此,似乎NSOperation对并发执行没有任何作用。异步是通过创建一个新线程来实现的。那么为什么我们需要NSOperation?

最佳答案

您可以使用并发的NSOperation执行异步任务。我们应该强调这一事实,即异步任务的主要工作将在与调用其start方法的线程不同的线程上执行。

那么,这为什么有用呢?

将异步任务包装到并发的NSOperation中,您可以利用NSOperationQueue,还可以在其他操作之间建立依赖关系。

例如,将操作排队到NSOperationQueue中可让您定义将并行执行的操作数。您还可以轻松取消整个队列,即已排队的所有操作。
NSOperationQueue还可用于将其与某些资源相关联-例如,一个队列执行CPU约束的异步任务,另一个队列执行IO约束的任务,而另一个队列执行与Core Data相关的任务,因此强制执行。对于每个队列,您可以定义最大并发操作数。

通过依赖关系,您可以实现合成。例如,这意味着您可以定义操作C仅在完成操作A和B之后才执行。使用组合可以解决更复杂的异步问题。

就是这样,恕我直言。

我想提一下,使用NSOperations有点麻烦,笨拙和冗长,这需要大量样板代码和子类等。不过,还有更好的替代方法需要第三方库。

关于ios - 实现异步NSOperation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33051969/

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