当我从C风格的函数体中访问它时,_cmd
变量的值是多少?
它仅在选择器(Objective-C)方法中定义吗?
P.S。
这个问题可能源于我对_cmd
的不理解。
如果有人向我提供了一个很好的解释来源,我将不胜感激。
答案 0 :(得分:21)
_cmd
函数的主要用途是获取调用它的方法名称。
_cmd与其他一些功能的用法如下所示。
NSLog(@"<%@:%@:%d>", NSStringFromClass([self class]), NSStringFromSelector(_cmd), __LINE__);
您也可以使用PrettyFunction
代替上线NSLog(@"%s", __PRETTY_FUNCTION__);
答案 1 :(得分:19)
仅适用于Objective-C方法,因此您无法访问它。传递给所有Objective-C方法的前两个参数是self
和_cmd
,然后是实际方法所采用的其他参数。由于self
和_cmd
都不会传递给常规C函数,因此无法访问它们。
这两个变量没有什么特别的魔力。
答案 2 :(得分:0)
请查看here以获取进一步说明。
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.