我知道如何在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在后台完成?

最佳答案

我意识到我不完全了解后台线程扩展的工作原理。

调用beginBackgroundTaskWithExpirationHandler启动后台扩展后,我可以在后台执行任何操作。我以为只扩展了一个线程,但实际上整个应用程序一直在运行。

因此,我只需要在最后一个NSOperation的末尾调用endBackgroundTask即可实现所需的功能。

关于ios - 如何扩展具有对appDidEnterBackground的依赖关系的NSOperationQueue?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11728390/

10-14 20:48