
162
|
第
5
章
接下来是调用的代码:
//
从资源包中读取所有
.png
文件的列表
let urls = Bundle.main
.urls(forResourcesWithExtension: "png",
subdirectory: nil) ?? []
//
装载整个文件列表
AssetLoader.loadAssets(at: urls) {
(url, data, error) -> Void in
//
遍历每个
URL
并依次执行这个块
if let data = data {
print("Loaded resource \(url.lastPathComponent) (\(data.count) bytes)")
} else if let error = error {
print("Failed to load resource \(url.lastPathComponent): \(error)")
} else {
fatalError("Didn't get data or an error; this should not happen!")
}
}
讨论
大文件的加载会耗用较长时间,我们当然不希望因为加载磁盘文件而让用户觉得屏
幕似乎被“冻住”了。为了解决这个问题,我们用一个专门的类在后台中处理资源
的加载。
AssetLoader
类创建了一个执行队列并用这个队列来进行资源的加载。当
资源装载结束,指定的块会在每一
URL
上执行(在主线程中)。 ...