Я должен отключить NSLog перед Приложением выпуска?

При выпуске приложения для iPhone, если я отключаю NSLog(); это будет работать лучше?

116
задан Nicolas Miari 13 January 2016 в 10:09
поделиться

3 ответа

Один из способов сделать это - зайти в настройки Build и в разделе Debug configuration добавить к значению "Preprocessor Macros" значение типа:

DEBUG_MODE=1

Убедитесь, что вы делаете это только для Debug configuration, а не для Beta или Release версий. Затем в общем заголовочном файле вы можете сделать что-то вроде:

#ifdef DEBUG_MODE
#define DLog( s, ... ) NSLog( @"<%p %@:(%d)> %@", self, [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__] )
#else
#define DLog( s, ... ) 
#endif

Теперь вместо NSLog используйте DLog везде. При тестировании и отладке вы будете получать отладочные сообщения. Когда вы будете готовы выпустить бета-версию или финальный релиз, все эти строки DLog автоматически станут пустыми, и ничего не будет излучаться. Таким образом, не требуется ручная установка переменных или комментирование NSLogs. Выбор целевого объекта сборки позаботится об этом.

125
ответ дан 24 November 2019 в 02:11
поделиться

Да, вы должны отключить его. Особенно, если вы пытаетесь максимизировать скорость своего кода. NSLogging вещей слева и справа загрязняет системный журнал, который другие разработчики могут пытаться раскопать, и это может иметь большое влияние на критичный по скорости код (внутренние циклы и т. Д.) Я случайно оставил некоторые сообщения журнала в рекурсивной функции один раз и должен выпустить обновление с «увеличением скорости на 30%!» несколько недель спустя ...; -)

5
ответ дан 24 November 2019 в 02:11
поделиться

NSLog работает медленно и не должен использоваться для сборки релизов. Простой макрос, подобный приведённому ниже, отключит его вместе с любыми возможными утверждениями, которые также должны быть отключены. В менее распространённых случаях, когда вы хотите использовать NSLog в сборке релиза, просто вызывайте его напрямую. Не забудьте добавить "-DNDEBUG" в настройки сборки "других c-флагов".

#ifdef NDEBUG
#define MYLog(f, ...) 
#else
#define MYLog(f, ...) NSLog(f, ## __VA_ARGS__)
#endif
3
ответ дан 24 November 2019 в 02:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: