Это в порядке для представления двоичного файла приложения для iPhone с операторами NSLog?

Я как раз собираюсь отправить свое первое приложение для iPhone.

Я поместил много операторов NSLog, чтобы протестировать и отладить приложение.

Таким образом, мой вопрос, "это хорошо для хранения операторов NSLog в исходном коде"

и у меня есть сомнение это, замедляют ли nslog операторы общее время выполнения или нет.

спасибо.

7
задан harshalb 5 February 2010 в 14:15
поделиться

5 ответов

Я использовал все это время (где-то нашел):

// 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 имеет более сложный способ отладки или регистрации.

9
ответ дан 6 December 2019 в 07:50
поделиться

В приложении, над которым я работал, ранее было много NSLog'ов, дамповавших отладку в консоль. Мы обнаружили, что они резко снижали производительность на iPhone 3G. Хит производительности был заметен на 3GS, но не так сильно.

Мой совет был бы использовать макрос препроцессора и определение препроцессора отладки, чтобы условно использовать NSLogs в отладочных сборках, но не в сборках релизов.

6
ответ дан 6 December 2019 в 07:50
поделиться

Я никогда не избавлялся от своего :)

Некоторые люди рекомендуют макросы условной компиляции / компиляции, чтобы вы могли делать сборку вообще без NSLog но я думаю, что это слишком много усилий за очень маленькую награду.

Однако NSLogs действительно замедляют работу приложения (немного), поэтому я бы удалил все, которые напрямую влияют на производительность. Кроме того, вы можете удалить некоторые данные журнала отладки, чтобы скрыть, как вы реализовали свое приложение и т. Д.

Надеюсь, что это поможет,

Сэм

2
ответ дан 6 December 2019 в 07:50
поделиться

Я просто использую одноэлементный 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)

вызывает некоторые накладные расходы, с которыми я готов иметь дело.

1
ответ дан 6 December 2019 в 07:50
поделиться

Три приложения, которые у меня есть в AppStore, загружены с помощью NSLogs, так что, думаю, все в порядке ...

3
ответ дан 6 December 2019 в 07:50
поделиться
Другие вопросы по тегам:

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