1

私のアプリでは、NSOperationのNSOperationQueueを作成して、バックグラウンドで複数の画像をダウンロードしました。データのダウンロード中にネットワーク接続が失われた場合にどうなるかを知りたいと思いました。これらがすべてキューに残っている操作であるかどうかは、終了としてマークされ、キューから削除されます。キューに残り、ネットワークが再び確立されたときにダウンロードプロセスを再開しますか?

NSOperationQueueがそのようなシナリオでどのように機能するかを誰かが説明できますか?

前もって感謝します!

4

1 に答える 1

3

現在のNSOperationは、障害信号を受信したときに残っているロジックを続行し、通常どおりに終了して、NSOperationQueueが次のNSOperationの実行を開始するようにします。それでもインターネットが復旧しない場合は、インターネットも失敗し、ネットワークが再接続するかどうかに関係なく、キューを移動し続け、ネットワークが再接続しない限り、すべての接続に失敗します。

考慮すべきことがたくさんあるので、これを処理するためのかなりの数の異なる方法がおそらくあります。たとえば、ネットワークのドロップアウトが原因でNSOperationが失敗した場合に、NSOperationを失敗としてマークするロジックをコードに追加し、失敗したNSOperationをキューに再度追加することができます。ただし、ネットワークが何年もダウンしたままの場合はどうなりますか?実装はイメージを永久にダウンロードしようとしても大丈夫ですか、それとも次にその機能が使用されるまであきらめる前に、特定のファイルのダウンロードを数回再試行するだけにする必要がありますか?

NSOperationがキューに追加される前、NSOperation自体がNSURLConnectionを起動する前など、一連のネットワーク到達可能性チェックを使用することもできます。失敗した場合は、ネットワークが再接続されるまでNSOperationを待機させることができます。継続する。(これを行うのは理想的ではありませんが、バックグラウンドスレッドで実行しているため、少なくともユーザーのアプリのインターフェイスがフリーズすることはありません)。

必要に応じて、質問で質問した機能を実装することもできます。つまり、ネットワークがドロップアウトすると、NSOperationQueueに残っているすべての操作がキャンセルされ、ネットが復旧したときに再試行する必要があることをユーザーに通知します。次に機能が呼び出されたときに、残りのすべてのNSOperationを再度追加します。

于 2012-07-26T05:16:53.697 に答える