私のアプリケーションでは、私はViewControllerを開いて約500枚のイメージをダウンロードする必要があります。一度に500枚の画像をすべてダウンロードするのは適切ではありません。一度に5つのアクティブな非同期ダウンロードを維持したいと思います。 5人に1人が完了すると、次の人が始まるはずです。iOSバルクイメージをダウンロードする最も良い方法
また、最初からすべてのイメージをダウンロードし直すようにリフレッシュコントロールがあります。
私はこのモーダルを実装するためにどのような技術を使うことができますか?ここで
は、セマフォは、Webサービスの応答を取得した後、プロパティ宣言
private var semaphore = dispatch_semaphore_create(5)
に作成され、私がこれまで試したどの
private func startDownloadingImages() {
for place in places {
dispatch_semaphore_wait(self.semaphore, DISPATCH_TIME_FOREVER)
self.downloadImageForPlace(place)
}
}
private func downloadImageForPlace(place: Place) {
ApplicationControls.getImageForPlace(place, withCompletion: { (image, error) ->() in
// error checks
dispatch_async(dispatch_get_main_queue(), {
// UI update
dispatch_semaphore_signal(self.semaphore)
})
})
}
しかし、私はリフレッシュ制御をタップし、アプリですdispatch_semaphore_wait
にロックして、セマフォをリセットする方法を見つけることができました。
私もそれを試みました。どうしてか分かりません。 NSOperationQueueはプロパティmaxConcurrentOperationCountに従っていませんでした。 500回のダウンロードのすべてがforループ内にありました。 – iOS
もちろん、それらはforループにありますが、操作キューは一度に5つ以上の操作を実行しません。 – ben