【问题标题】:dispatchqueue using in asynchronously to speedup in Swift 4dispatchqueue 在 Swift 4 中异步使用以加速
【发布时间】:2018-01-31 13:09:44
【问题描述】:

我有一个使用 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!)")
                    }
                })
            }
        }

我做对了吗,还是需要修改?

【问题讨论】:

    标签: ios swift grand-central-dispatch swift4 dispatch-queue


    【解决方案1】:

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

        DispatchQueue.global().async {…}
    

    【讨论】:

      【解决方案2】:

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

      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 或某个库,很可能它将在某个后台线程上执行,因此不应该暗示任何开销。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多