Значение _cmd внутри функции c - PullRequest
16 голосов
/ 11 декабря 2010

Каково значение переменной _cmd, когда я обращаюсь к ней из тела функции в стиле C?

Определяется ли он только внутри методов селектора (Objective-C)?

PS

Этот вопрос может возникнуть из-за моего непонимания того, что такое _cmd.Я был бы очень признателен, если бы кто-нибудь предоставил мне хороший источник объяснений.

Ответы [ 3 ]

21 голосов
/ 05 мая 2014

Основное использование функции _cmd - получение имени метода, в котором она вызывается.

Использование _cmd с некоторыми другими функциями было написано ниже.

NSLog(@"<%@:%@:%d>", NSStringFromClass([self class]), NSStringFromSelector(_cmd), __LINE__);

Вместо вышеуказанной строки вы также можете использовать PrettyFunction

NSLog(@"%s", __PRETTY_FUNCTION__); 
19 голосов
/ 11 декабря 2010

Это только для методов Objective-C, поэтому вы не можете получить к нему доступ. Первые два параметра, передаваемые всем методам Objective-C, - это self и _cmd, затем любые другие аргументы, которые принимает фактический метод. Поскольку ни self, ни _cmd не передаются обычным функциям C, вы не можете получить к ним доступ.

В обеих переменных нет ничего особенного.

0 голосов
/ 10 февраля 2017

Пожалуйста, посмотрите здесь для дальнейших объяснений.

func class_addMethod(_ cls: AnyClass!, 
                   _ name: Selector!, 
                   _ imp: IMP!, 
                   _ types: UnsafePointer<Int8>!) -> Bool

имп

A function which is the implementation of the new method. The function must take at least two arguments—self and _cmd.
...