Как загрузить раскадровки в фоновом режиме? - PullRequest
0 голосов
/ 07 июня 2018

Я разделил свое приложение на несколько раскадровок, вызванных программно.Как мне загружать их в фоновом режиме, чтобы пользователю не пришлось ждать несколько секунд, прежде чем приложение ответит, особенно на более медленных устройствах, таких как iPad 2 и iPhone 4s?

1 Ответ

0 голосов
/ 07 июня 2018

К сожалению, это не задокументировано (по крайней мере, я не могу вспомнить, где), если создание UIStoryboard из фонового потока разрешено или нет.Как правило, классы UIKit не являются потокобезопасными и должны использоваться только из основного потока.Поэтому вам нужно исследовать себя.

Технически, UIStoryboard.init(name:bundle:) не должно вызывать такой большой задержки, потому что, когда XCode компилирует ваш проект, он разделит вашу раскадровку на отдельные файлы NIB (каждый для одного контроллера представления, каксериализованный граф объектов) и просто ссылки на них.Таким образом, большая часть затрат времени выполнения должна заключаться в создании экземпляров контроллеров представления из этой раскадровки, а не в самой раскадровке.

Но вы можете попробовать сами и проверить стоимость времени выполнения:

  • Создать «глобальный» словарь
  • создать все свои раскадровки, используя некоторую фоновую нить GDC
  • и сохранить их (используя имя раскадровки в качестве ключа) в этом словаре
  • возможно также создать все контроллеры представления (и сохранить их как вложенные записи)

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

...