黑马程序员技术交流社区

标题: oc中的SEL [打印本页]

作者: liu01230    时间: 2015-5-14 17:31
标题: oc中的SEL
oc中的SEL是什么东西,用在哪里呢?

作者: ios专用    时间: 2015-5-14 18:00
oc的sel是一种类型,可以通过方法名称找到方法
作者: 狂甩你十八条街    时间: 2015-5-14 18:10
SEL是ios提供一种选择方法的途径,这么说你可能有点晕。
一般是这样的,比如说你创建了一个数组,相对里面的每一个元素都调用一种方法,这时候就用到它了。
@selector(这里写你要对每个元素调用的方法名)
这里值得注意的是,方法如果需要传参数,方法名后面不要忘了加:
作者: xiaofei93    时间: 2015-5-14 23:38
一种数据类型,类中的所有方法都会封装成一个sel对象,调用方法时候,通过sel类型数据找到方法,你可以理解为sel放的是方法的地址
作者: 追随自然    时间: 2015-5-14 23:57
学到知识了

作者: liu01230    时间: 2015-5-15 09:21
xiaofei93 发表于 2015-5-14 23:38
一种数据类型,类中的所有方法都会封装成一个sel对象,调用方法时候,通过sel类型数据找到方法,你可以理解 ...

知道了,谢谢了
作者: liu01230    时间: 2015-5-15 09:23
狂甩你十八条街 发表于 2015-5-14 18:10
SEL是ios提供一种选择方法的途径,这么说你可能有点晕。
一般是这样的,比如说你创建了一个数组,相对里面 ...

创建数组为什么是调用方法呢?
作者: su199325    时间: 2015-5-15 22:50
SEL就是一种包装方式简而言之
作者: 一步一个脚印    时间: 2015-5-17 19:02
OC的编译器会将方法名,是方法名哦,带冒号的哦,编译成SEL类型的数据,也就是中源代码中的方法名编译后会变成SEL类型的数据,方法名相同的方法的SEL类型的数据都是一样的。运行时,运行时系统会根据会确定消息接受者的实际类型,然后在该对象的类对象中搜索消息名(方法名),这个时候是SEL类型的数据了哦,如果一个类中存在重载的方法,运行时系统 将乎出错,如果方法名相同 而返回值或参数类型不同,这个时候将会出现各种预料不到的错误。所以编译的时候如果有重载,编译器就会警告,运行时如果方法签名不一致 ,就会出错。over




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