_cmd значение внутри c функций

Какое значение переменной _cmd изменяется при доступе к нему из тела функции C-стиля?

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

P.S.

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

Ответы

Ответ 1

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

В каждой переменной нет ничего особенного.

Ответ 2

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

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

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

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

NSLog(@"%s", __PRETTY_FUNCTION__); 

Ответ 3

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

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.