2012-07-30 102 views
0

我知道iOS应用程序进入背景如何使用依赖关系为appDidEnterBackground扩展NSOperationQueue?

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

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

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

因此,我只需要在最后一次NSOperation结束时调用endBackgroundTask来实现我想要的功能。

相关问题