Стоит ли свободно использовать NSLog? - PullRequest
6 голосов
/ 09 ноября 2010

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

Я вижу определенный удар по производительности на симуляторе, поскольку он распечатывает все эти вещи. Я не думаю, что вижу такое попадание на устройствах, но я не уверен.

Так стоит ли оставлять все NSLogs в? Это использует больше памяти на устройстве? Или компилятор просто игнорирует их, как это делает комментарии, когда я компилирую для устройства?

EDIT:

Вот что я реализовал, согласно предложению rano.

В моем файле App_Prefix.pch я добавил:

// DLog is almost a drop-in replacement for NSLog
// 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(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
#   define DLog(...)
#endif

// ALog always displays output regardless of the DEBUG setting
#define ALog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);

А затем в моем Project Info инспекторе для конфигурации Debug под заголовком GCC 4.2 - Preprocessing, я добавил значение DEBUG в верхнюю запись с именем Preprocessor Macros.

Работает как шарм - DLog выводит, когда я создаю Debug версию, а ALog всегда выводит.

Ответы [ 3 ]

7 голосов
/ 09 ноября 2010

NSLog, безусловно, дороже , чем простой printf, но немного более интегрирован в каркас задачи C и Cocoa.

Кстати, если вы серьезно программируете, вы заметите, что этого недостаточно для большинства ваших потребностей. Взгляните на эту статью и ее ссылки, чтобы получить представление о том, как ее заменить разумным способом.

Таким образом, вы можете также заставить компилятор игнорировать его, когда он больше не нужен (например, когда вы выпустите свой кусок кода). В общем, вы могли бы #ifdef вызывать функцию журнала для вычисления интенсивных циклов / последовательностей кода.

0 голосов
/ 02 января 2013

Ответы выше устарели.Вам просто нужно использовать CocoaLumberjack , значительно превосходящий NSLog и обеспечивающий гораздо больше функциональных возможностей, чем приведенные выше ответы.

0 голосов
/ 09 ноября 2010

NSLog не реализован как макрос, поэтому стоимость определенно будет. Определить его количественно и решить, важно ли это, сложнее. Единственный верный способ сделать это - измерить собственное приложение.

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