Может ли кто-нибудь сказать мне, в чем разница между NSLog
и DLog
?
Я узнал об этом DLog, когда просматривал этот код проекта: http://code.google.com/p/iphone-socks-proxy/
Может ли кто-нибудь сказать мне, в чем разница между NSLog
и DLog
?
Я узнал об этом DLog, когда просматривал этот код проекта: http://code.google.com/p/iphone-socks-proxy/
NSLog
- это функция, встроенная в платформу Foundation, предоставляемую Apple. Я никогда не слышал о DLog
, поэтому предполагаю, что это нестандартная функция, реализованная в коде, который вы просматриваете.
DLog
означает «Журнал отладки» (я предполагаю) и обычно представляет собой макрос, который ничего не оценивает, если флажок среды DEBUG
выключен - в основном в приложениях для доставки.
- person Itai Ferber; 12.03.2012
DLog - это широко используемая альтернатива "Отладка NSLog" (для этого нужен только Google)
Вот полный набор директив Log #define (включая ULog, функцию ведения журнала на основе UIAlertView).
// DLog will output like NSLog only when the DEBUG variable is set
#ifdef DEBUG
# define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
# define DLog(...)
#endif
// ALog will always output like NSLog
#define ALog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
// ULog will show the UIAlertView only when the DEBUG variable is set
#ifdef DEBUG
# define ULog(fmt, ...) { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:[NSString stringWithFormat:@"%s\n [Line %d] ", __PRETTY_FUNCTION__, __LINE__] message:[NSString stringWithFormat:fmt, ##__VA_ARGS__] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alert show]; }
#else
# define ULog(...)
#endif
Просто поместите их в файл заголовка предварительной компиляции (.pch).
(источник: http://overbythere.co.uk/blog/2012/01/alternatives-nslog а>)
DLog - это макрос, предназначенный для определения условий поведения NSLog()
в сборках отладки и выпуска. Для релизных сборок он ничего не печатает. NSLog()
предназначен для вывода строк формата на консоль.
Вот его определение для справки:
#ifdef DEBUG
# define DLog(...) NSLog(__VA_ARGS__)
#else
# define DLog(...) /* */
#endif
#define ALog(...) NSLog(__VA_ARGS__)
NSLog
не предназначен для вывода строковых литералов на консоль - для этого вы можете использовать printf
(или fputs
) и друзей, если хотите. Задача NSLog
- выводить полезную и достоверную информацию в системный журнал.
- person Itai Ferber; 12.03.2012
Привет! Ниже макроса cmd для формата файла замены NSLOG, а также ниже я упомянул макрос undef, а также
Определение:
#define _LOG_TO_CONSOLE_ //#undef _LOG_TO_CONSOLE_
#ifdef _LOG_TO_CONSOLE_
#define DLog(format, ...) NSLog(format, ##__VA_ARGS__)
#else
#define DLog(format, ...)
#endif
Я думаю, что важное различие между NSLog и DLog заключается в том, что NSLog задерживает выполнение программы (представьте, что вы забыли удалить все вызовы NSLog при производстве / публикации), поэтому для целей отладки следует использовать DLog.