2013-03-25 1 views
3

Я хочу обработать любой NSLog в моем коде как ошибку. Строкой должна быть ошибка времени компиляции в Xcode. Точно так же, как использование release в проекте с поддержкой ARC рассматривается как ошибка.Относитесь к использованию NSLog как ошибка построения

+0

Тогда как "освобождение" отображается как ошибка в разблокированном проекте ARC? –

+0

Вы можете просто искать все 'NSLog (command + shift + F)' и заменять его '// NSLog' перед отладкой. –

+0

Да, «Поиск и замена» - это простое решение, но все же люди, которые присоединяются к новым в команде, могут по-прежнему использовать NSLog, забывая иногда заменять NSLog. Поэтому проверяем возможность предотвратить его в конечном счете, отметив как ошибку времени компиляции. –

ответ

3

Попробуйте это,

#define NSLog_UNAVAILABLE __attribute__((unavailable("NSLog is treated as Error."))) 
FOUNDATION_EXPORT void NSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2) NSLog_UNAVAILABLE; 
+0

@VinothKumar Это то, что вам нужно? –

+0

Спасибо iMartin, dreamlax, bhargavi. –

+0

Я бы предложил сделать это только для релизов. Таким образом, вы можете использовать nslog для целей отладки (эй, это так), и это сильно не удастся для сборки релиза. – bbum

1

Вы можете переобъявить прототип NSLog в коде с __deprecated, поэтому любое использование его будет производить предупреждение:

FOUNDATION_EXPORT void NSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2) __deprecated; 

Тогда, может быть, есть какой-то способ превратить warnign в заблуждение.

+0

Это дает предупреждение везде, где используется NSLog. Спасибо, проверит любые способы показать предупреждение как ошибку. –

0

Вы можете использовать это, если вы используете Clang в качестве компилятора (на самом деле просто понял, GCC поддерживает C11-х _Static_assert тоже с версии 4.6):

#define NSLog(...) _Static_assert(0, "Not allowed to use NSLog!") 

компиляция потерпит неудачу, если _Static_assert терпит неудачу.

+0

NSlog показан как ошибка в Xcode 4.6, однако еще две ошибки добавляются новые, а именно ошибка компоновщика Apple Mach-O и Symutil Error. –

+0

FOUNDATION_EXPORT void NSLog (формат NSString *, ...) NS_FORMAT_FUNCTION (1,2) __unavailable; Это также работает, как предположил iMartin, однако добавляются еще 2 ошибки, а именно ошибка Apple Mach-O и ошибка DSymbutil –

+0

@VinothKumar: я не знаю, что вы имеете в виду, я пробовал, и это работает, поэтому, возможно, ваша ошибка в другом месте? Убедитесь, что вы произносили все в правильном случае. – dreamlax