Код: Выделить всё
import OSLog
let logger = Logger(subsystem: "com.example.app", category: "General")
func someFunction() {
logger.debug("Debugging someFunction execution")
// Function logic
}
Я видел, как некоторые кодовые базы заключают операторы журнала отладки в директивы препроцессора #if DEBUG, чтобы гарантировать их включение только в отладочные сборки, например:
Код: Выделить всё
#if DEBUG
logger.debug("Debugging someFunction execution")
#endif
2. Существуют ли какие-либо накладные расходы на вызов функций или другое влияние на производительность журналов отладки в режиме выпуска?
Если журналы отладки (например, logger.debug) не удаляются компилятором в сборках выпуска, существуют ли измеримые накладные расходы (например, накладные расходы на вызовы функций, использование памяти или инициализация системы журналирования)? Или процесс оптимизации компилятора Swift (или реализация OSLog) гарантирует, что журналы отладки не окажут влияния на выпускные сборки?
3. Как лучше избегать повсеместного написания #if DEBUG?
Если #if DEBUG необходим, есть ли способ избежать оборачивания каждого оператора журнала директивами препроцессора? Например, могу ли я условно определить неактивный регистратор или пустой контент для режима выпуска, чтобы упростить код? Мне нужен понятный и удобный в обслуживании подход для глобального ведения журналов отладки без повторяющихся проверок #if DEBUG.
Я ориентируюсь на iOS 14+ и использую Swift 5.7+. Я был бы признателен за любую информацию о том, как компилятор Swift обрабатывает вызовы OSLog в сборках выпуска и является ли перенос журналов отладки в #if DEBUG лучшей практикой или излишним.
Подробнее здесь: https://stackoverflow.com/questions/796 ... is-if-debu
Мобильная версия