0

我有一系列必须按顺序执行的任务,因此它们由 DispatchQueue 控制。为了通知用户他们正在离开,我启动了活动图标。但是,如果关闭主线程,我该如何停止?

从逻辑上讲,我想要实现的是:

override func viewDidLoad() {
   super.viewDidLoad()    
   self.activityIcon.startAnimating()

   DispatchQueue.main.async {
      self.bigTask1()   
   }

   DispatchQueue.main.async {
      self.bigTask2()  
      self.activityIcon.stopAnimating() 
   }
}

这显然会产生运行时错误:“UIActivityIndicatorView.stopAnimating()必须仅从主线程使用”。

stopAnimating()它放在主队列中会如此快速地打开和关闭它,没有人会看到它。

什么是批准的方式调用这样的功能退出main队列?

非常感谢。Ps 我已经阅读了关于 SO 的类似问题的答案,但不太明白。

4

1 回答 1

4

您可以在默认情况下执行大任务background queue,当大任务完成时,只需获取main队列并执行任何 UI 更新。

override func viewDidLoad() {
   super.viewDidLoad()

   self.activityIcon.startAnimating()

   DispatchQueue.global().async {
      self.someBigTask()

      DispatchQueue.main.async {
         self.activityIcon.stopAnimating()
      }
   }

}

希望你会发现这很有帮助。

于 2019-05-25T09:37:57.097 回答