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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始



但把转换成SEL一起用就没有警告,是为什么呢?
[p  performSelector:@selector(test)]; 这样没有警告,是为什么呢?

屏幕快照 2014-11-06 下午10.08.18.png (52.58 KB, 下载次数: 37)

屏幕快照 2014-11-06 下午10.08.18.png

4 个回复

倒序浏览
SEL是把方法包装成SEL类型的数据,根据SEL数据找到对应的方法地址,再调用方法。如果不定义,他就会警告选择的方法不知道!希望对你有帮助。
回复 使用道具 举报
本帖最后由 doudou33420 于 2014-11-7 16:26 编辑

之所以报错是因为 同名方法都对应一个相同的SEL
但当不同类中的方法被#import到main函数或其他类中  这些方法就放到一起来了   然后使用@selector单独查找的时候 是不会把同名区分开的
只有当你用类名或者对象名  来调用的时候 他才能区分开;  所以你先用@selector查找出来的东西有可能不是你想查找的类中的方法SEL地址;
但当你用[p performselector: @ selector]的时候  你自己看看@selector左边多了什么,
多了类名嘛 意思是 在这个类里面查找方法名 并转换成地址; 所以既然是在取这个类中的方法来转换  那怎么可能会警告可能会找不到方法名呢
你不信可以用NSselectformstring来试试 放哪里都会警告
希望你能理解我说的
回复 使用道具 举报
其实跟二楼说的是差不多意思
你能理解就好
回复 使用道具 举报
doudou33420 发表于 2014-11-7 16:27
其实跟二楼说的是差不多意思
你能理解就好

真的没有明白你说的是什么意思啊!老兄 直接上代码吧!我看一下!:)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马