当我从C风格函数的主体访问它时,_cmd
变量的值是多少?c函数内部的_cmd值
它仅在选择器(Objective-C)方法内部定义吗?
P.S.
这个问题可能起源于我对_cmd
的不了解。 如果有人向我提供了一个很好的解释来源,我将不胜感激。
当我从C风格函数的主体访问它时,_cmd
变量的值是多少?c函数内部的_cmd值
它仅在选择器(Objective-C)方法内部定义吗?
P.S.
这个问题可能起源于我对_cmd
的不了解。 如果有人向我提供了一个很好的解释来源,我将不胜感激。
这仅适用于Objective-C方法,因此您无法访问它。传递给所有Objective-C方法的前两个参数是self
和_cmd
,然后是实际方法采用的任何其他参数。由于self
和_cmd
都不会传递给常规C函数,因此您无法访问它们。
这两个变量都没有什么特别的魔力。
_cmd
函数的主要用途是获取调用它的方法名称。
在下面写了_cmd和其他一些函数的用法。
NSLog(@"<%@:%@:%d>", NSStringFromClass([self class]), NSStringFromSelector(_cmd), __LINE__);
代替以上线你也可以使用PrettyFunction
NSLog(@"%s", __PRETTY_FUNCTION__);
敬请期待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.
作为参考:[目的-C的方法](http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/参考/的reference.html)。请注意,任何将'id'和'SEL'作为前两个参数的C函数都可以用作方法实现。同样,任何方法实现都是一个C函数,它将前两个参数用作“id”和“SEL”。 – outis 2010-12-18 20:08:05
为了更加清楚,'_cmd'是一个'SEL' - Objective-C方法的方法选择器。 “方法选择器是已用Objective-C运行时注册(或”映射“)的C字符串。” – 2013-04-23 20:29:35