Подтвердить что ты не робот

Как получить имя или подпись текущего метода в NSString?

Пример: У меня есть метод -myFooBarMethod:withFoo:bar:moreFoo: и внутри реализации этого метода я хочу динамически получить его имя, например @"-myFooBarMethod:withFoo:bar:moreFoo:, в NSString. Нет жесткого ввода подписи метода.

Я чувствую, что это должно что-то делать с селекторами. Как я могу получить имя текущего метода (тот, который выполняет код) как NSString?

4b9b3361

Ответ 1

Каждый вызов метода также передает два скрытых аргумента: a id с именем self и a SEL с именем _cmd. Вы можете использовать NSStringFromSelector для преобразования селектора методов в NSString:

NSStringFromSelector(_cmd);

Ответ 2

Используйте __func__. Это строка C, поэтому для NSString используйте [NSString stringWithUTF8String:__func__].

Это имеет два преимущества перед _cmd:

  • Он работает в C-функциях и методах С++, а также в методах Objective-C. (На самом деле, __func__ требуется для существования на C99.)
  • В Objective-C методах он включает тип метода (метод класса против метода экземпляра) и имя класса, а также селектор. Например, "-[MyView drawRect:]".

Ответ 3

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

NSLog(@"%@ %@: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), @"A Message");

Сбрасывает класс и метод на консоль при ведении журнала.

Ответ 4

В соответствии с ответом Мартина, но вы также можете прочитать информацию Objective C 2.0 Runtime.

Игра в такие кишки, как правило, приводит к сложному управлению кодом.