_cmd 的用法 以及 使用NSStringFromSelector

_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来查找方法,由于整数的查找比匹配字符串快得多,
所以这样可以在某种程序上提高执行的效率

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,762评论 0 9
  • 原文链接:http://www.cocoachina.com/ios/20150807/12911.html 现如...
    Kevin追梦先生阅读 1,488评论 0 3
  • 我们常常会听说 Objective-C 是一门动态语言,那么这个「动态」表现在哪呢?我想最主要的表现就是 Obje...
    Ethan_Struggle阅读 2,230评论 0 7
  • 对于从事 iOS 开发人员来说,所有的人都会答出【runtime 是运行时】什么情况下用runtime?大部分人能...
    梦夜繁星阅读 3,732评论 7 64
  • 最近腰会酸,而且有时弯腰还会咯吱一声响。腿也酸困无力,走两步直想坐那歇歇。长期久坐缺乏锻炼,导致腰椎有问题。今天早...
    Hifly816阅读 101评论 0 0