A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Hi围城 中级黑马   /  2014-3-27 08:06  /  1317 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Hi围城 于 2014-3-27 15:59 编辑
  1. - (void)test2
  2. {
  3.     NSString *str = NSStringFromSelector(_cmd); //请问此行为什么要这样写,为什么不能写成NSString *str = &_cmd?
  4.     NSLog(@"-----test2-----%@------", str);
  5.     //[self performSelector:_cmd];
  6. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

3 个回复

倒序浏览
呵呵!
每个方法中都有SEL类型的_cmd方法,代表当前的方法
_cmd这个是方法而不是变量,&_cmd这个是不合理的

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
_cmd在OC中表示当前方法的selector。selector是一种SEL类型。NSStringFromSelector函数返回一个selector的方法的名称。这里用一个字符串str来储存这个方法名。
而你说用NSString *str = &_cmd来代替这是什么意思??&_cmd取这个selector的地址?然后赋值给一个OC字符串??这里_cmd是一个selector,是一种SEL类型。好吧,虽然,OC中,SEL本质上是一个C字符串。如果你非要这么做,至少也不要前面的取地址符&。那岂不变成了一个char **类型赋给一个NSString *。这段代码的意义本来就是打印这个方法的名称。勉强这样写:NSString *str = _cmd; 也应该可以。但没有什么意义。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
嗯,_cmd代表着当前方法的SEL。
谢谢你们!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马