Ответ 1
Как правило, все операции Cocoa и Cocoa Touch должны выполняться в основном потоке. Если вы этого не сделаете, у вас могут возникнуть проблемы, такие как пользовательский интерфейс, который не обновляется должным образом, а иногда даже падает. Поэтому вы должны перевести свой вызов на performSegueWithIdentifier
:
DispatchQueue.main.async {
self.performSegue(withIdentifier: "jumpToMessagesViewController", sender: self)
}
В UIKit (Cocoa Touch) вызов материала пользовательского интерфейса в фоновом потоке был верным способом свернуть в старые времена. Начиная с iOS 4 (IIRC), многие вещи теперь "потокобезопасны" в том смысле, что приложение больше не падает, но некоторые операции просто игнорируются при выполнении в фоновом потоке. Поэтому всегда нужно выполнять свой код, который помешает с объектами пользовательского интерфейса в основном потоке.
Я не уверен в безопасности потоков AppKit (Cocoa). Я знаю, что вызов приложения AppKit в фоновом потоке может привести к краху вашего приложения, но я не знаю, действительно ли это правда. Лучше быть в безопасности, чем сожалеть, и также называть свои объекты пользовательского интерфейса в основном потоке.