Какова стоимость включения (фактически, вызова #import) заголовочного файла в Objective-C?
Компилятор может закончиться без необходимости читать эти файлы. После #import
ed дополнительные файлы должны быть проанализированы, скомпилированы и т. Д. Для каждого перевода (например, файл .m
), это видно в: время сборки и ссылок намного дольше. 10 раз дольше не удивительно.
Я устал постоянно включать одни и те же заголовки в разных местах, поэтому я решил просто создать файл GlobalReferences.h, который включает в себя несколько заголовков с общими ссылками.
Как правило, это очень плохой подход. Общая проблема заключается в том, что всякий раз, когда какой-либо из файлов, включенных в GlobalReferences.h, изменяется, весь проект и все взаимозависимые зависимости нужно перестраивать, перенаправлять и т. Д.
Мое предпочтение состоит в том, чтобы разделить программы на небольшие библиотеки или пакеты, где существует эта взаимозависимость (например, StoreKit.framework - это небольшой пакет/библиотека), но набивка этих библиотек/фреймворков/пакетов в заголовках ничего не решает. Кроме того, форвардные декларации и сохранение ваших данных в продолжении класса или @implementation
могут значительно уменьшить зависимости (потому что вы можете локализовать включение библиотеки/заголовка только в необходимые переводы).
Наконец, очистка после ленивых включает в себя очень много времени, особенно когда их много, и вы ждали, пока время сборки вашего проекта будет невыносимо медленным. В принципе, вам нужно вернуться и выделить ненужные зависимости, перестроить, повторить (за несколько дней).
Есть ли какая-то значительная цена на включение ссылок на другие файлы, если они еще не используются?
Абсолютно. Чем больше ваши проекты растут, тем хуже становится ленивое включение. Несколько ленивых включений в большой проект могут добавить десятки или сотни тысяч строк в большинство ваших скомпилированных файлов и могут вызвать частое перекомпиляцию многих источников. Это добавляет значительную сложность в процесс сборки - требования к процессору идут вверх, использование ОЗУ идет вверх, дисковый IO идет вверх ... и снова это становится более серьезной проблемой по мере увеличения сложности ваших кодовых баз/проектов.
Спасибо, что расчистили это. – LucasTizma