子线程获取
时间: 2024-02-17 11:59:59 浏览: 21
在 iOS 中,我们通常在主线程上更新 UI,而在子线程上执行一些耗时的操作,以避免阻塞主线程。但是,我们也可以在子线程上获取图片,只需在回调中使用 GCD 将 UI 更新操作派发到主线程即可。
以下是一个在子线程获取图片并在主线程更新 UI 的示例代码:
```swift
let requestOptions = PHImageRequestOptions()
requestOptions.isSynchronous = true
requestOptions.deliveryMode = .highQualityFormat
requestOptions.resizeMode = .exact
requestOptions.normalizedCropRect = CGRect(x: 0, y: 0, width: 1, height: 1)
let asset = // 获取图片对应的 PHAsset 对象
let imageManager = PHImageManager.default()
let imageSize = CGSize(width: 100, height: 100)
DispatchQueue.global().async {
imageManager.requestImage(for: asset, targetSize: imageSize, contentMode: .aspectFill, options: requestOptions) { (image, info) in
DispatchQueue.main.async {
if let image = image {
// 在主线程更新 UI
} else {
// 获取图片失败
}
}
}
}
```
在这个示例中,我们使用 GCD 创建了一个子线程,并在这个子线程上执行了获取图片的操作。在获取到图片后,我们将更新 UI 的操作派发到主线程,以避免在子线程上更新 UI。在主线程中,我们可以更新 UI 或处理获取图片失败的情况。