Objective-C эквивалент if (D) Log.w (TAG, «Сообщение») - PullRequest
0 голосов
/ 27 октября 2011

В своих программах для Android я часто использовал:

приватный статический финальный логический D = true;

Тогда все мои звонки в журнал были добавлены, если (D)

if(D)Log.w("Tag", "message");

Это помогло легко очистить код, установив значение D в false, чтобы удалить все журналы.

2 вопроса: Есть ли у вызовов "NSLog" в задаче C какие-либо издержки продукта релиза?

Что будет лучшим эквивалентом логики if (D) выше?

Прямо сейчас я пытаюсь

#ifdef macro
NSLog(@"%@",@"Some debug info");
#endif

Это удаляет рассматриваемый код из модуля компиляции?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 27 октября 2011

Да, звонки на NSLog накладные расходы. Каждый вызов - это вызов функции, которая форматирует строку и записывает ее куда-то.

Да, #ifdef macro полностью удаляет вызов NSLog, если macro не определено.

Однако вам может быть проще сделать что-то вроде этого:

// Use this to enable debug logging
#define D_NSLog(...) NSLog(__VA_ARGS__)

// Use this to disable debug logging
#define D_NSLog(...) do {} while(0)

и используйте D_NSLog вместо NSLog.

0 голосов
/ 27 октября 2011

NSLog не имеет каких-либо издержек продукта выпуска. Моя ошибка / неправильное представление здесь, я подумал, что под его словами он имел в виду, должен ли он назвать release или нет.

Лучший эквивалент, вероятно, будет:

BOOL D = YES;

if (D)
{
    NSLog("Tag: %@", tag);
    NSLog("String: %@", string);
}

alernatively:

#define D YES

if (D)
{
    NSLog("Tag: %@", tag);
    NSLog("String: %@", string);
}

Какой бы способ не работал ... если я правильно понимаю ваш вопрос.

...