Можно ли запретить использование NSLog, чтобы он появился как ошибка, если используется во время компиляции? В идеале какой-то флаг компилятора с именем метода, который запрещен?Disallow NSLog для использования
Благодаря
Можно ли запретить использование NSLog, чтобы он появился как ошибка, если используется во время компиляции? В идеале какой-то флаг компилятора с именем метода, который запрещен?Disallow NSLog для использования
Благодаря
Если вы повторно объявить NSLog
(и, возможно, также NSLogv
) как
void NSLog(NSString *format, ...) UNAVAILABLE_ATTRIBUTE;
void NSLogv(NSString *format, va_list args) UNAVAILABLE_ATTRIBUTE;
в вашем скомпилированного файла заголовка, вы получите хороший сообщение об ошибке:
main.m:199:3: error: 'NSLog' is unavailable NSLog(@"%@", s1); ^
Вы можете даже предоставить собственное сообщение об ошибке (найдено в Messages on deprecated and unavailable Attributes документации Clang):
void NSLog(NSString *format, ...) __attribute__((unavailable("You should not do this!")));
main.m:202:3: error: 'NSLog' is unavailable: You should not do this! NSLog(@"%@", s1); ^
В заголовке вашей приставки:
#define NSLog(x, ...) (__please_dont_use_NSLog__)
Попробуйте это!
#ifdef DEBUG
# define NSLog(...) NSLog(__VA_ARGS__)
#else
# define NSLog(...)
#endif
Решения можно найти здесь: Enable and Disable NSLog in DEBUG mode
Надеется, что это помогло!
Это не создает ошибку, если используется NSLog, она просто отключает вывод NSLog. –
Из любопытства, почему? –
@TRedman - Я читаю книгу «Learning Core Audio» - Theres примечание, в котором говорится, что автор не смог понять, почему его код не работал, он заново запустил NSLog и нашел, что код работал, оказалось это была проблема скорости. – Chris
Вопрос интересный, но автор книги должен был попытаться найти актуальную проблему в своем коде. Например, сопоставление возиться следующим образом: 'BOOL byes = YES; NSLog (@ "% @", (byes = NO)? @ "N": @ "Y"); '- обратите внимание, что нет никакого оператора сравнения, а' byes' - 'NO' после этого NSLog. –