调度队列异步使用 in 以在 Swift 4 中加速



我有一个用 Swift 1.2 开发的旧 iOS 应用程序。其中使用调度队列来加快运行时。

dispatch_async(dispatch_get_main_queue()) { 
}

在 Swift 4 中,我尝试通过如下所示进行更改

DispatchQueue.main.async { [weak self] in
        if let strongSelf = self {
            strongSelf.imapFetchFoldersOp?.start({ (error, folders) -> Void in
                    if let error = error {
                        #if DEBUG
                            print("(String(describing: error._userInfo))")
                        #endif
                    } else {
                        strongSelf.folders = folders! as NSArray
                        strongSelf.fetchInfoForBoxes()
                        print("Floders :(folders!)")
                    }
                })
            }
        }

我是否正确操作或需要修改?

您不需要调度到后台队列吗? 还是需要在主线程上运行?

    DispatchQueue.global().async {…}

如果您已经在主线程上,我看不出将其异步调度到它的原因,我相信在您的情况下,最好这样做:

self.imapFetchFoldersOp?.start({ (error, folders) -> Void in
    if let error = error {
        #if DEBUG
             print("(String(describing: error._userInfo))")
        #endif
    } else {
        self.folders = folders! as NSArray
        self.fetchInfoForBoxes()
        print("Folders :(folders!)")
    }
})
说明:您已经在主线程上,在主线程

上异步调度任务只会将该任务排队到主线程,因此它不会立即执行,而是在当前任务结束时执行(例如,绘图等(。我假设imapFetchFoldersOp是一个从邮件服务器下载一些数据的任务 - 在这种情况下,如果您使用的是URLSession或某些库,它很可能会在某个后台线程上执行,因此这不应该意味着任何开销。

最新更新