При выпуске приложения для iPhone, если я отключаю NSLog();
это будет работать лучше?
Один из способов сделать это - зайти в настройки 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
. Выбор целевого объекта сборки позаботится об этом.
Да, вы должны отключить его. Особенно, если вы пытаетесь максимизировать скорость своего кода. NSLogging вещей слева и справа загрязняет системный журнал, который другие разработчики могут пытаться раскопать, и это может иметь большое влияние на критичный по скорости код (внутренние циклы и т. Д.) Я случайно оставил некоторые сообщения журнала в рекурсивной функции один раз и должен выпустить обновление с «увеличением скорости на 30%!» несколько недель спустя ...; -)
NSLog работает медленно и не должен использоваться для сборки релизов. Простой макрос, подобный приведённому ниже, отключит его вместе с любыми возможными утверждениями, которые также должны быть отключены. В менее распространённых случаях, когда вы хотите использовать NSLog в сборке релиза, просто вызывайте его напрямую. Не забудьте добавить "-DNDEBUG" в настройки сборки "других c-флагов".
#ifdef NDEBUG
#define MYLog(f, ...)
#else
#define MYLog(f, ...) NSLog(f, ## __VA_ARGS__)
#endif