gpt4 book ai didi

iOS下载批量图像的最佳方式

转载 作者:搜寻专家 更新时间:2023-11-01 07:20:04 26 4
gpt4 key购买 nike

在我的应用程序中,我必须在打开 ViewController 时下载近 500 张图像。一次下载所有 500 张图像不是一个正确的主意。我想一次保持 5 个事件的异步下载。当五分之一完成时,应该开始下一个。

我还有一个刷新控件,它将重新开始下载所有图像。

我可以采用哪种技术来实现此模式?

到目前为止,这是我尝试过的,

信号量在属性声明中创建

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 并且我能够找到重置信号量的方法。

最佳答案

我会像这样使用 OperationQueue

let queue = OperationQueue()
queue.maxConcurrentOperationCount = 5;

for url in imageUrls {
queue.addOperationWithBlock { () -> Void in

let img1 = Downloader.downloadImageWithURL(url)

NSOperationQueue.mainQueue().addOperationWithBlock({
//display the image or whatever
})
}


}

你可以用这个停止你的操作

queue.cancelAllOperations();

然后重新开始整个事情。

您唯一需要更改的是您的请求必须是同步的。因为这种方法不适用于回调。

关于iOS下载批量图像的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39617230/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com