从主线程执行 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 对象。
可以从主线程执行 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 对象。