【发布时间】:2019-11-11 15:48:35
【问题描述】:
我正在快速设计 iOS 应用程序,它在每个屏幕上下载 6 张图像,我有八个这样的屏幕。每次显示屏幕时,我都会异步下载图像。下载后如何一次显示所有图像..我应该使用调度组
我还应该缓存我的图像,因为用户可以返回上一个屏幕吗? 如果我缓存我可能必须缓存所有图像(8 个屏幕 - 每个 6 个图像:总共 42 个图像).. 将所有图像都缓存在缓存中不是不好的做法吗?
请指教
【问题讨论】:
我正在快速设计 iOS 应用程序,它在每个屏幕上下载 6 张图像,我有八个这样的屏幕。每次显示屏幕时,我都会异步下载图像。下载后如何一次显示所有图像..我应该使用调度组
我还应该缓存我的图像,因为用户可以返回上一个屏幕吗? 如果我缓存我可能必须缓存所有图像(8 个屏幕 - 每个 6 个图像:总共 42 个图像).. 将所有图像都缓存在缓存中不是不好的做法吗?
请指教
【问题讨论】:
这是一次显示所有图像的想法。使用DispatchSemaphore,根据Documentation
调度信号量是传统的有效实现 计数信号量。调度信号量只调用内核 当调用线程需要被阻塞时。如果调用信号量 不需要阻塞,不进行内核调用。
您可以通过调用 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 可以完成工作。
【讨论】: