Задержка при использовании метода instantiateViewControllerWithIdentifier, но не выполнение функции SigueWithIdentifier?

Приведенный ниже код используется для подталкивания другого контроллера вида в стек навигации.

При использовании instantiateViewControllerWithIdentifier , segue заметно вяло в первый раз (~ 3 секунды), но происходит достаточно быстро каждый последующий раз. Другие сообщения SO, предлагающие обеспечить segue, происходят в основном потоке, который выполняет код, но это не устраняет проблему.

Однако использование функции performSegueWithIdentifier вызывает задержек.

Код viewDidLoad для SendViewController одинаковый для первого и последующих нажатий.

Пробовал viewDidLoad для контроллера представления назначения, но все же существует задержка для instantiateViewControllerWithIdentifier но не для функции performSegueWithIdentifier .

Как исправить задержку с помощью instantiateViewControllerWithIdentifier ?

Без задержки:

 @IBAction func buttonTapped(sender: UIButton) { performSegueWithIdentifier(SendSegue, sender: self) } 

Результаты в задержке при отображении SendViewController в первый раз:

 @IBAction func buttonTapped(sender: UIButton) { dispatch_async(dispatch_get_main_queue()) { let vc = self.storyboard!.instantiateViewControllerWithIdentifier(self.SendViewControllerID) as! SendViewController self.navigationController!.pushViewController(vc, animated: true) } } 

Эта проблема может возникать во многих разных сценариях. Лучший способ определить, что вызывает вашу конкретную проблему, – это профилирование с помощью инструментов, включенных в Xcode.

  1. Нажмите и удерживайте кнопку «Создать» в окне вашего xcode. Появится четыре параметра, выберите « Профиль» .
  2. После того, как появится окно с инструментами, появится всплывающее окно. Выберите «Профилирование времени» из параметров.
  3. В нем появится новое окно с различными метриками. В верхнем левом углу будет красная кнопка записи . Нажмите кнопку красной записи, и это запустит приложение на вашем телефоне.
  4. Перейдите к переходу, давая вам проблемы. Завершите запись после перехода, выбрав ту же самую кнопку, с которой вы начали запись.
  5. Просмотрите панель «Подробности» в нижнем левом углу. Вы увидите столбец под названием «Время выполнения», в котором указано время, необходимое для выполнения каждого метода в вашем коде (оба метода ОС и код, созданный пользователем)
  6. Определите, что что-то неуместно или происходит, что не предназначено. Возможно, вернитесь назад и выполните переход снова, чтобы сравнить разницу между ними. Щелчок по функции в списке приведет вас непосредственно к выполняемому коду. Это может быть очень полезно.

Весьма вероятно, что если переход займет 3-5 секунд, одна конкретная функция будет очевидна при выполнении этих шагов. Счастливое профилирование!

WWDC с прошлого года также имеет большой сегмент. Def worth проверить здесь: (только в Safari) WWDC Profiling Talk

Проблема была изолирована наличием UITextField в контроллере представления назначения, то есть удаление UITextField устраняет задержку.

Затем он был дополнительно изолирован от наличия пользовательского шрифта.

Другими словами, использование системного шрифта на UITextField, а не пользовательский шрифт, устраняет задержку. Никаких объяснений почему, но это работает.

  • GKGameCenterViewController всегда показывает вызовы вместо лидеров
  • Как выполнить «90% слайд» между двумя UIViews
  • Подкласс UIViewController не может назначать переменную экземпляра
  • Текущий контроллер просмотра в раскадровке с навигационным контроллером - Swift
  • Как реализовать бесконечную прокрутку UITableView
  • Отображение нескольких видов из навигационного контроллера
  • SWRevealViewController, предотвращает попадание viewdidload
  • Вернуться к RootViewController из Modal View Controller
  • Расширение представления UIViewController без панели навигации в строке состояния
  • Анимированное переключение UIViewController в iOS8
  • iOS 7 UIViewController (с навигационной панелью) не вставляет UIScrollView
  • Давайте будем гением компьютера.