我正在快速设计iOS应用,该应用在每个屏幕上下载6张图片,而我有8个这样的屏幕。每次显示屏幕时,我都会异步下载图像。下载后如何一次显示所有图像..我应该使用调度组吗?
我还应该缓存图像,因为用户可以返回上一屏幕吗? 如果我缓存,则可能必须缓存所有图像(8个屏幕-6张图像:总共42张图像)..将所有图像都保存在缓存中不是不好的做法吗?
请咨询
答案 0 :(得分:0)
这里是一次显示所有图像的想法。根据{{3}}
使用DispatchSemaphore
调度信号量是传统方法的有效实现 计数信号量。调度信号仅调用内核 当调用线程需要被阻塞时。如果调用信号量 不需要阻止,无需进行内核调用。
您可以通过调用signal()方法来增加信号量计数,然后 通过调用wait()或其变体之一来减少信号量计数 指定超时。
// Declaration
let semaphore = DispatchSemaphore(value: 1)
...
// resource request
semaphore.wait()
...
// resource release
semaphore.signal()
示例
DispatchQueue.global().async {
print("download 1 - wait")
semaphore.wait()
print("download 1 - wait finished")
semaphore.signal()
print("download 1 - finished")
}
是否缓存图像取决于您的情况,如果屏幕非常重要并且经常返回此屏幕,NSCache
可以完成此工作。