黑马程序员技术交流社区

标题: 单独调用performSelector的时候,为什么会有警告呢? [打印本页]

作者: gululu23    时间: 2014-11-6 22:14
标题: 单独调用performSelector的时候,为什么会有警告呢?


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

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

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

作者: wanglei123    时间: 2014-11-7 16:00
SEL是把方法包装成SEL类型的数据,根据SEL数据找到对应的方法地址,再调用方法。如果不定义,他就会警告选择的方法不知道!希望对你有帮助。
作者: doudou33420    时间: 2014-11-7 16:24
本帖最后由 doudou33420 于 2014-11-7 16:26 编辑

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

真的没有明白你说的是什么意思啊!老兄 直接上代码吧!我看一下!:)




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2