首页 > 解决方案 > 如何在 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()
        }
    }
}

标签: swiftmultithreading

解决方案


推荐阅读