Выбор ответа Senior Модульность обновлено
Статические и динамические модули на iOS
Вопрос
Приложение разбито на 80 динамических фреймворков, и холодный старт стал медленнее. Почему и что делать?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Загрузчик тратит время на каждую динамическую библиотеку при запуске; модули линкуют статически. Каждая динамическая библиотека это работа dyld до main: загрузка, связывание символов, применение фиксапов.
Варианты ответа
- Загрузчик тратит время на каждую динамическую библиотеку при запуске; модули линкуют статическиправильный ответ
- Динамические фреймворки загружаются лениво и не влияют на старт, причина в инициализаторах
+load - Нужно перевести модули на Objective-C: Swift-фреймворки линкуются медленнее из-за метаданных
- Apple ограничивает приложение 50 динамическими модулями, остальные загружаются в режиме эмуляции
Разбор
Каждая динамическая библиотека это работа dyld до main: загрузка, связывание символов, применение фиксапов. Десятки фреймворков дают заметную задержку. Статическая линковка сливает код в бинарник приложения, а модульность в исходниках сохраняется. Динамической делают библиотеку, которую разделяют приложение и его расширения (виджеты, share extension), чтобы не дублировать код. Лимита Apple на число модулей нет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.