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