Можно ли отправить бинарный файл приложения iPhone с инструкциями NSLog? - PullRequest
7 голосов
/ 05 февраля 2010

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

Я поместил множество операторов NSLog для тестирования и отладки приложения.

Итак, мой вопрос: "Можно ли сохранить операторы NSLog в исходном коде"

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

спасибо.

Ответы [ 7 ]

9 голосов
/ 05 февраля 2010

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

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

6 голосов
/ 05 февраля 2010

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

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

3 голосов
/ 05 февраля 2010

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

2 голосов
/ 08 июля 2011

XCode4 предлагает довольно удобное решение для этого - используйте точки останова. выберите действие «Записать сообщение» и установите val = @ val @ в качестве сообщения, затем установите флажок «автоматически продолжить после оценки действий».

Подходит не для каждого варианта использования, но дает вам преимущество легкой «проверки» ценностей и гарантий, что они не превратятся в релиз.

2 голосов
/ 05 февраля 2010

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

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

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

Надеюсь, это полезно,

Sam

1 голос
/ 07 февраля 2010

Я просто использую синглтон useDebugMode int, установленный в 0 или 1, который хранится в userPrefs (plist).И, в зависимости от UUID iphone, я добавляю переключатель «Использовать режим отладки: вкл / выкл» на экран настроек, чтобы в будущем можно было отлаживать проблемы с производственными версиями.Это позволяет мне отлаживать проблемы с данными (с загруженным XML), если люди будут жаловаться на проблемы с программой в будущем.Затем я обертываю все "NSLog" и "printf" в

if (useDebugLog == 1)
{
     NSLog(@"debug statement");
}

Это работает для меня ... Конечно,:

 if (useDebugLog == 1)

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

0 голосов
/ 17 марта 2011

Это не проблема использования NSLog в Release. Но если вы поместите какие-либо ценные данные в журнал, другой пользователь (разработчик) сможет их увидеть. Например, какая-то ссылка для скачивания и т.д ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...