1

私は次のシーケンスを持っています:

  1. MBProgressHUD スピナーを開始
  2. NSConnectionURL と実装された connectionDidFinishLoading デリゲートを使用して複数の画像をダウンロードし、画像を表示します
  3. すべての画像がダウンロードされたらスピナーを停止し、すべての画像を含む親ビューを表示します

connectionDidFinishLoading:スピナーを停止できるように、すべての画像がダウンロードされたかどうかを判断するには、どのように実装すればよいですか?

ダウンロード数を追跡する必要がありますが、スレッド セーフはどうでしょうか。

それとも、GCDを見ているべきですか?

4

2 に答える 2

3

を使用してNSOperationQueue、ダウンロードを同期NSURLConnectionリクエストによる個別のブロック操作として送信します。そこで同時操作の最大数を設定できるため、一度にすべてをダウンロードすることはなく、無料でキャンセルできます。完了の追跡は、別の操作をキューに送信するだけで実行できます。最後に送信された操作は、すべてのダウンロードが完了した後に実行されます。ただし、これにはおそらく同時操作の数を 1 つに制限する必要があるため、代替手段は残りの操作の数を監視 (KVO) することです。それがゼロになったら完了です。

于 2012-10-17T15:43:32.600 に答える
1

スピナーを停止できるように、すべての画像がダウンロードされたかどうかを判断するには、connectionDidFinishLoading: をどのように実装すればよいですか?

アクティブな接続の数を追跡することでそれを行います。接続自体を変更可能な配列に保持し、完了したら削除するか、接続の開始時にカウンターをインクリメントし、終了時にカウンターをデクリメントすることができます。いずれにせよ、アクティブな接続の数がゼロになると、スピナーを削除します。

于 2012-10-18T13:24:01.577 に答える