1

iOSアプリがバックグラウンドに入った後、バックグラウンドで実行するためにタスクを拡張する方法を知っています

beginBackgroundTaskWithExpirationHandler
dispatch_async

しかし、NSOperations の相互依存性を失うことなく、バックグラウンド タスクとして拡張したい NSOperationQueue がある場合はどうなるでしょうか? 私がこれを持っているとしましょう:

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 を呼び出してバックグラウンド拡張を開始した後は、バックグラウンドでやりたいことが何でもできます。拡張されたスレッドは 1 つだけだと思っていましたが、実際にはアプリケーション全体が実行され続けています。

したがって、最後の NSOperation の最後に endBackgroundTask を呼び出して、目的を達成する必要があります。

于 2012-09-26T21:46:07.760 に答える