从主线程执行 segue 可以吗?

Is it ok to perform a segue off the main thread?

可以从主线程执行 segue 吗?

user.saveInBackgroundWithBlock { (success: Bool!, error: NSError!) -> Void in
 if success == false || error != nil {
  println(error)
 } else {
  self.performSegueWithIdentifier("jumpToMessagesViewController", sender: self)
 }
}

或者正确的做法是什么?

一般来说,所有 Cocoa和Cocoa触摸操作都应该在主线程中完成。如果不这样做,您可能会遇到 UI 无法正确更新等问题,有时甚至会崩溃。所以你应该把你的电话换成 performSegueWithIdentifier:

DispatchQueue.main.async {
  self.performSegue(withIdentifier: "jumpToMessagesViewController", sender: self)
}

在 UIKit (Cocoa Touch) 中,在后台线程上调用 UI 内容在过去肯定会导致崩溃。自从 iOS 4 (IIRC) 以来,很多事情现在都变成了 "thread-safe",因为应用程序不再崩溃,但某些操作在后台线程中执行时会被忽略。因此,在主线程上执行与 UI 对象混淆的代码总是一个好主意。

我不确定 AppKit 的线程安全性 (Cocoa)。我知道在后台线程上调用 AppKit 可能会使您的应用程序崩溃,但我不知道这是否是真的。安全总比后悔好,并在主线程上调用您的 UI 对象。