Я как раз собираюсь отправить свое первое приложение для iPhone.
Я поместил много операторов NSLog, чтобы протестировать и отладить приложение.
Таким образом, мой вопрос, "это хорошо для хранения операторов NSLog в исходном коде"
и у меня есть сомнение это, замедляют ли nslog операторы общее время выполнения или нет.
спасибо.
Я использовал все это время (где-то нашел):
// DLog is almost a drop-in replacement for NSLog to turn off logging for release build
//
// add -DDEBUG to OTHER_CFLAGS in the build user defined settings
//
// Usage:
//
// DLog();
// DLog(@"here");
// DLog(@"value: %d", x);
// Unfortunately this doesn't work DLog(aStringVariable); you have to do this instead DLog(@"%@", aStringVariable);
//
#ifdef DEBUG
# define DLog(__FORMAT__, ...) NSLog((@"%s [Line %d] " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
#else
# define DLog(...) do {} while (0)
#endif
// ALog always displays output regardless of the DEBUG setting
#define ALog(__FORMAT__, ...) NSLog((@"%s [Line %d] " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
Проект three20 от Facebook имеет более сложный способ отладки или регистрации.
В приложении, над которым я работал, ранее было много NSLog'ов, дамповавших отладку в консоль. Мы обнаружили, что они резко снижали производительность на iPhone 3G. Хит производительности был заметен на 3GS, но не так сильно.
Мой совет был бы использовать макрос препроцессора и определение препроцессора отладки, чтобы условно использовать NSLogs в отладочных сборках, но не в сборках релизов.
Я никогда не избавлялся от своего :)
Некоторые люди рекомендуют макросы условной компиляции / компиляции, чтобы вы могли делать сборку вообще без NSLog но я думаю, что это слишком много усилий за очень маленькую награду.
Однако NSLogs действительно замедляют работу приложения (немного), поэтому я бы удалил все, которые напрямую влияют на производительность. Кроме того, вы можете удалить некоторые данные журнала отладки, чтобы скрыть, как вы реализовали свое приложение и т. Д.
Надеюсь, что это поможет,
Сэм
Я просто использую одноэлементный int useDebugMode, установленный на 0 или 1, который хранится в userPrefs (plist). И, в зависимости от UUID iphone, я добавляю переключатель «Use Debug Mode: on / off» на экран настроек, чтобы в будущем я мог отлаживать проблемы с производственными версиями. Это позволяет мне отлаживать проблемы с данными (с загруженным XML), если люди жалуются на проблемы с программой в будущем. Затем я оборачиваю все "NSLog" и "printf" в
if (useDebugLog == 1)
{
NSLog(@"debug statement");
}
. Это работает для меня ... Конечно,:
if (useDebugLog == 1)
вызывает некоторые накладные расходы, с которыми я готов иметь дело.
Три приложения, которые у меня есть в AppStore, загружены с помощью NSLogs, так что, думаю, все в порядке ...