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对象.
| 归档时间: |
|
| 查看次数: |
3367 次 |
| 最近记录: |