我知道如何在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在后台完成?
答案 0 :(得分:1)
我意识到我并不完全理解后台线程扩展是如何工作的。
在调用beginBackgroundTaskWithExpirationHandler启动后台扩展后,我可以在后台执行任何操作。我认为只有一个线程被扩展,但事实上整个应用程序一直在运行。
因此,我必须在最后一次NSOperation结束时调用endBackgroundTask来实现我想要的目标。