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

时间:2015-01-04 13:30:43

标签: multithreading swift segue

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

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

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

1 个答案:

答案 0 :(得分:17)

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

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

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

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