Ответ 1
Попробуйте NSLog(@"%s", __func__)
. Это печатает красивое описание, например -[MyView drawRect:]
.
Это также работает с функциями. Это функция компилятора.
Я пытаюсь отлаживать приложение для iPhone, над которым я работаю, и идея добавить пятьдесят инструкций NSLog к различным исходным файлам дает мне завещания.
Что бы я хотел сделать, это написать пару утверждений, скажем
NSString *methodName = [self methodName];
NSLog(@"%@", methodName);
что я могу просто вставить в каждый метод, который мне нужен. Есть ли способ сделать это? Есть ли конструктор Objective-C для запроса метода для его имени? Или я собираюсь сделать это с трудом?
Попробуйте NSLog(@"%s", __func__)
. Это печатает красивое описание, например -[MyView drawRect:]
.
Это также работает с функциями. Это функция компилятора.
Использование: NSLog("%@", NSStringFromSelector(_cmd));
_cmd
- это специальная переменная, передаваемая каждому методу точно так же, как self
, который является ссылкой на селектор, вызвавший вызов метода (в основном имя метода и подпись).
Я часто использую следующие макросы:
#if DEBUG
# define LOG(format, args ...) fprintf(stderr, format "\n", ## args)
# ifdef __cplusplus
# define ERR(format, args ...) fprintf(stderr, "[%s] (%s:%i): " format "\n", __PRETTY_FUNCTION__, __FILE__, __LINE__, ## args)
# else
# define ERR(format, args ...) fprintf(stderr, "[%s] (%s:%i): " format "\n", __func__, __FILE__, __LINE__, ## args)
# endif
#else
# define LOG(format, args ...)
# define ERR(format, args ...)
#endif
Если вам всегда нужно имя функции, вы можете легко их адаптировать по мере необходимости.
Это то, что вы хотите:
NSLog(@"%s", __PRETTY_FUNCTION__);
Для получения дополнительной информации о связанных материалах ведения журнала прочитайте ответы на этот вопрос: Как распечатать имя метода и номер строки и условно отключить NSLog?