Ответ 1
Каждый вызов метода также передает два скрытых аргумента: a id
с именем self
и a SEL
с именем _cmd
. Вы можете использовать NSStringFromSelector
для преобразования селектора методов в NSString:
NSStringFromSelector(_cmd);
Пример: У меня есть метод -myFooBarMethod:withFoo:bar:moreFoo:
и внутри реализации этого метода я хочу динамически получить его имя, например @"-myFooBarMethod:withFoo:bar:moreFoo:
, в NSString. Нет жесткого ввода подписи метода.
Я чувствую, что это должно что-то делать с селекторами. Как я могу получить имя текущего метода (тот, который выполняет код) как NSString?
Каждый вызов метода также передает два скрытых аргумента: a id
с именем self
и a SEL
с именем _cmd
. Вы можете использовать NSStringFromSelector
для преобразования селектора методов в NSString:
NSStringFromSelector(_cmd);
Используйте __func__
. Это строка C, поэтому для NSString используйте [NSString stringWithUTF8String:__func__]
.
Это имеет два преимущества перед _cmd
:
__func__
требуется для существования на C99.)"-[MyView drawRect:]"
.В качестве примера, где это полезно: это шаблон для сообщений NSLog, которые я использую:
NSLog(@"%@ %@: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), @"A Message");
Сбрасывает класс и метод на консоль при ведении журнала.
В соответствии с ответом Мартина, но вы также можете прочитать информацию Objective C 2.0 Runtime.
Игра в такие кишки, как правило, приводит к сложному управлению кодом.