Неужели iOS потеряла большую часть преимущества использования динамических фреймворков?
Неужели iOS потеряла большую часть преимущества использования динамических фреймворков?
Поскольку iOS копирует все необходимые динамические структуры в пакет приложений, она не разделяет динамические структуры между приложениями и не экономит память. За исключением разделения памяти с основным приложением и его расширениями.
Приложение, использующее
dlOpen
не может быть доставлен в App Store. Это означает, что Apple официально запрещает использование динамической структуры.В старом документе Apple говорится, что динамические фреймворки экономят время запуска приложений, но в новом документе говорится, что это не так. Старый документ устарел? Вот сравнение:
- ускорить запуск приложения и использовать меньше памяти после запуска
- Загружайте меньше динамических библиотек. Это может быть одна из самых продолжительных частей общего времени запуска приложения. Apple рекомендует использовать не более шести несистемных фреймворков. Посмотрите, можете ли вы удалить какие-либо динамические библиотеки, которые вы используете, заменив их статическими версиями или скомпилировав их исходные коды напрямую.
Означает ли это, что мы используем динамические фреймворки с dlOpen
загружать их потом будет быстрее статических фреймворков? Потому что динамическим фреймворкам вначале требуется некоторое время для связывания, но они экономят больше времени при загрузке в память. И время загрузки статических фреймворков больше, чем время компоновки в динамических фреймворках. Это правда?
Похоже, что в использовании динамических фреймворков на iOS нет никаких преимуществ, верно?
А как насчет macOS и Linux? Есть ли преимущества у динамических фреймворков? Если да, то как они работают?
1 ответ
Вы правы во всем этом. Несистемные (то есть не предоставленные Apple) динамические библиотеки будут менее эффективными практически во всех отношениях на iOS. Они не дают вам экономии места или памяти и требуют затрат во время запуска.
Старый документ Apple, на который вы ссылаетесь, был почти полностью написан до появления iPhone. Это относится к поздней загрузке библиотек в приложениях Mac, которые могут помочь ускорить запуск.
В системах с разделяемыми библиотеками (или при использовании системных библиотек, которые совместно используются в iOS) динамические библиотеки экономят дисковое пространство и могут использоваться совместно между процессами, что экономит память и время загрузки (потому что они уже загружены каким-то другим процессом). Но если вы не поделитесь библиотекой, вы не сможете получить ни одного из этих преимуществ. В системах, которые разрешают загрузку библиотек во время выполнения (не iOS), динамические библиотеки могут задерживать затраты на загрузку редко используемого кода, возможно, на неопределенный срок (если код никогда не используется). Кроме того, он открывает возможности для плагинов и других расширений.