swift - 如何在 Swift 中处理线程同步
问题描述
我正在尝试从 TCP 套接字下载图像而不阻塞主线程上的 UI。我希望 decodeImage() 函数等到下载完成,然后在 UI 上设置图像。此代码不是线程同步的,因为经过几次尝试它会中断。
我如何同步这些?我看过苹果的教程,但它们不是很具体,没有任何真实的例子,所以我不知道如何解决这个问题。
func downloadImage() {
DispatchQueue.global(qos: .userInitiated).async {
let imageBufferSize = self.networkManager.readBufferSize()
let bytesArray = ([UInt8])(imageBufferSize)
let data = Data(_: bytesArray)
let bufferSizeInteger = data.withUnsafeBytes { $0.load(as: UInt32.self)}
let imageData = self.networkManager.readLosslessData(expectedSize: Int(bufferSizeInteger))
DispatchQueue.main.async {
self.decodeImage(from: imageData)
self.networkManager.closeSocket()
}
}
}
解决方案
推荐阅读
- c# - 为什么 Visual-Studio 会为一个应用程序自动生成 app.config 而不是另一个应用程序?
- c# - C# DrawLines 到 DrawBeziers
- python - Holoviews 曲线中的关键尺寸用于在字典中查找值
- android - 在 Android 的 Webview 中嵌入 Spotify 无法正常工作
- c# - C# 将时间戳添加到 PKCS#7 CMS 数字签名
- python - Python:获取列表的可能性并更改循环数
- laravel - 如何使用 FilePond 上传图片?
- bash - 使用 bash 在 n 斜杠之间捕获文本
- python - TypeError的解决方法是什么:QTreeWidget.setModel() is a private method
- node.js - NodeJS 向 Laravel 服务器发送请求错误