从主线程执行segue是否可以?

gra*_*ury 13 multithreading segue swift

从主线程执行segue是否可以?

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

或者这样做的正确方法是什么?

Dar*_*ust 19

通常,所有 Cocoa和Cocoa Touch操作都应该在主线程上完成.如果不这样做,您可能会遇到UI无法正确更新等问题,有时甚至会崩溃.所以你应该把你的电话包裹起来performSegueWithIdentifier:

DispatchQueue.main.async {
  self.performSegue(withIdentifier: "jumpToMessagesViewController", sender: self)
}
Run Code Online (Sandbox Code Playgroud)

在UIKit(Cocoa Touch)中,在后台线程上调用UI东西是在过去的日子里崩溃的可靠方法.从iOS 4(IIRC)开始,很多东西现在都是"线程安全的",因为应用程序不再崩溃,但在后台线程中执行时,某些操作会被忽略.因此,执行与主线程上的UI对象混淆的代码总是一个好主意.

我不确定AppKit(Cocoa)的线程安全性.我知道在后台线程上调用AppKit的东西可能会崩溃你的应用程序,但我不知道这是否真的.最好是安全而不是抱歉,并在主线程上调用您的UI对象.