NSLog на устройстве, это проблема, или я должен удалить это? - PullRequest
7 голосов
/ 20 июня 2011

Я прочитал этот пост: что происходит с информацией NSLog при работе на устройстве?

... но мне интересно, если NSLog является проблемой при распространении приложения, например, при заполнениипамять что ли?Мне интересно видеть это только когда я проверяю согласованность своих входных данных с базой данных.

Причина в том, что у меня есть NSLog для контроля, когда я загружаю данные в свою базу данных в симуляторе.Я мог бы удалить его при загрузке, но было бы хорошо, если бы мне это не нужно?

Ответы [ 5 ]

7 голосов
/ 20 июня 2011

Вы должны удалить его.Например, если вы регистрируете содержимое UITableViewCell (в -tableView:cellForRowAtIndexPath:), это может сильно повлиять на производительность, особенно на более медленном оборудовании.

Используйте макрос для сохранения вывода NSLog в режиме отладки, но удалите егоиз режима выпуска.Пример можно найти на следующем сайте: http://iphoneincubator.com/blog/debugging/the-evolution-of-a-replacement-for-nslog

5 голосов
/ 21 июня 2011

Я использую набор макросов в моем файле pch, которые очень удобны для этого.

Подробнее см. http://www.cimgf.com/2010/05/02/my-current-prefix-pch-file/.

#ifdef DEBUG
  #define DLog(...) NSLog(@"%s %@", __PRETTY_FUNCTION__, [NSString stringWithFormat:__VA_ARGS__])
  #define ALog(...) [[NSAssertionHandler currentHandler] handleFailureInFunction:[NSString stringWithCString:__PRETTY_FUNCTION__ encoding:NSUTF8StringEncoding] file:[NSString stringWithCString:__FILE__ encoding:NSUTF8StringEncoding] lineNumber:__LINE__ description:__VA_ARGS__]
#else
  #define DLog(...) do { } while (0)
  #ifndef NS_BLOCK_ASSERTIONS
    #define NS_BLOCK_ASSERTIONS
  #endif
  #define ALog(...) NSLog(@"%s %@", __PRETTY_FUNCTION__, [NSString stringWithFormat:__VA_ARGS__])
#endif

#define ZAssert(condition, ...) do { if (!(condition)) { ALog(__VA_ARGS__); }} while(0)
3 голосов
/ 20 июня 2011

Журнал на устройстве хранит только около часа данных, даже приложения Apple регистрируют немало вещей там.Таким образом, в целом приемлемо иметь значимый вывод в журнале.

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

Из-за этого вы должны регистрировать только то, что дает больше информации, если в вашем приложении происходят ошибки, чтобы облегчить поиск того, что идет не так.

1 голос
/ 21 июня 2011

Подумайте о переходе на cocoalumberjack , он является заменой NSLog и обладает значительно более полезной функциональностью и лучшей производительностью.

По концепции он аналогиченДругие популярные каркасы журналирования, такие как log4j, но разработаны специально для target-c и используют преимущества таких функций, как многопоточность, грандиозная централизованная диспетчеризация (если доступна), атомарные операции без блокировки и динамический характер времени выполнения target-c..

0 голосов
/ 20 июня 2011

Единственная реальная причина для удаления записей NSLog - экономия на потреблении памяти за счет запуска ненужного кода, но если вы постоянно не добавляете данные, это не должно быть слишком большой проблемой.Кроме того, если у пользователя есть проблема, такая как сбой приложения и т. Д., Могут быть отправлены NSlogs, которые разработчик может прочитать, чтобы выяснить причину сбоя.Если вы загружаете NSlog с большим количеством ненужных данных, это может быть проблематичным позже, если вам нужно просмотреть указанный журнал, чтобы найти проблему пользователя, чтобы решить проблему.

В конце концов, я бы не стал слишком беспокоиться об их удалении.Это все равно мои 2 цента.

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