Ios 如何使用AppDiEnterBackground的依赖项扩展NSOperationQueue?

Ios 如何使用AppDiEnterBackground的依赖项扩展NSOperationQueue?,ios,objective-c,cocoa-touch,multitasking,nsoperationqueue,Ios,Objective C,Cocoa Touch,Multitasking,Nsoperationqueue,我知道在iOS应用程序进入后台后,如何扩展在后台运行的任务 beginBackgroundTaskWithExpirationHandler dispatch_async 等等 但是,如果我有一个NSOperationQueue,希望作为后台任务进行扩展,而不丢失NSOperations之间的相互依赖性,该怎么办?假设我有这个: NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{ // Do stuf

我知道在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启动后台扩展后,我可以在后台执行任何我想要的操作。我以为只有一个线程被扩展,但实际上整个应用程序都在运行


因此,我必须在最后一次NSO操作结束时调用endBackgroundTask来实现我想要的功能。

我意识到我没有完全理解后台线程扩展是如何工作的

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

因此,我只需在最后一次NSO操作结束时调用endBackgroundTask即可实现我想要的功能