1

我知道如何在 iOS 应用程序进入后台后扩展任务以在后台运行

beginBackgroundTaskWithExpirationHandler
dispatch_async

等等

但是,如果我有一个 NSOperationQueue 想要扩展为后台任务,又不会丢失 NSOperations 的相互依赖关系呢?说我有这个:

NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
    // Do stuff
}];

NSBlockOperation *op2a = [NSBlockOperation blockOperationWithBlock:^{
    // Do stuff
}];
[op2a addDependency:op1];

NSBlockOperation *op2b = [NSBlockOperation blockOperationWithBlock:^{
    // Do stuff
}];
[op2b addDependency:op1];

NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
    // Do stuff
}];
[op3 addDependency:op2a];
[op3 addDependency:op2b];

NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue addOperations: @[op1, op2a, op2b, op3] ];

有没有一种优雅的方式让 NSOperationQueue 在后台完成?

4

1 回答 1

1

我意识到我并没有完全理解后台线程扩展的工作原理。

在调用 beginBackgroundTaskWithExpirationHandler 启动后台扩展后,我可以在后台为所欲为。我以为只是扩展了一个线程,但实际上是整个应用程序都在继续运行。

因此,我只需要在最后一个 NSOperation 结束时调用 endBackgroundTask 即可实现我想要的。

于 2012-09-26T21:46:07.760 回答