_cmd在Objective-C的方法中表示当前方法的selector,正如同self表示当前方法调用的对象实例。
比如需要打印当前被调用的方法,可以在一个方法中添加:
NSLog(@"%@ call",NSStringFromSelector(_cmd));
会输出类似
2013-01-10 11:25:46.902 TDDataViewer[855:303] applicationDidFinishLaunching: call
这样的内容。
SEL sel=@selector(compare:);
NSString *functionName= NSStringFromSelector(sel);
SEL anotherSel=NSSelectorFromString(方法名字的字符串);
在编译时设置变量为SEL变量最有效的方法就是@selector()指令。然而,在某些情况下,你可能需要在运行时转换一个字符串为一个selector。
第一行是直接在程序里面写上方法的名字,第2行是通过sel变量获取方法的名字。第三行是写上方法名字的字符串.
我们得到 SEL变量之后,可以通过下面的调用来给一个对象发送消息:
[对象 performSelector:SEL变量 withObject:参数1 withObject:参数2];
这样的机制增加了程序的灵活性,可以通过给一个方法传递sel参数,让这个方法动态的执行某一个方
法,我们也可以通过配置文件制定需要执行的方法,程序读取配置文件之后把方法的字符串翻译成sel变量然后给相应的对象发送这个消息
从效率的角度上来说,执行的时候不是通过方法名字而是通过方法的ID来查找方法,由于整数的查找比匹配字符串快得多,
所以这样可以在某种程序上提高执行的效率