2010-12-11 37 views
15

当我从C风格函数的主体访问它时,_cmd变量的值是多少?c函数内部的_cmd值

它仅在选择器(Objective-C)方法内部定义吗?

P.S.

这个问题可能起源于我对_cmd的不了解。 如果有人向我提供了一个很好的解释来源,我将不胜感激。

回答

17

这仅适用于Objective-C方法,因此您无法访问它。传递给所有Objective-C方法的前两个参数是self_cmd,然后是实际方法采用的任何其他参数。由于self_cmd都不会传递给常规C函数,因此您无法访问它们。

这两个变量都没有什么特别的魔力。

+3

作为参考:[目的-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

+7

为了更加清楚,'_cmd'是一个'SEL' - Objective-C方法的方法选择器。 “方法选择器是已用Objective-C运行时注册(或”映射“)的C字符串。” – 2013-04-23 20:29:35

18

_cmd函数的主要用途是获取调用它的方法名称。

在下面写了_cmd和其他一些函数的用法。

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

代替以上线你也可以使用PrettyFunction

NSLog(@"%s", __PRETTY_FUNCTION__); 
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.