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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© D调的沉默 中级黑马   /  2014-4-28 22:44  /  1300 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 D调的沉默 于 2014-5-4 11:38 编辑

在sel这一节中,老师说如对象调用方法【p test】 会把test方法包装成sel数据类型去找类中得方法,然后老师说sel数据其实是函数地址。
然后这一点特别 不理解,sel的地址是类中test方法的地址吗?那就是所有对象如【p2 test】,[p3 test]他们都是同一个sel吗?sel实在不理解

评分

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

查看全部评分

8 个回复

倒序浏览
sel是什么????
回复 使用道具 举报
其实可这样理解:就是把方法包装成SEL类型的数据,SEL就相当于消息,如果要调用这个方法,就给发送一条SEL消息,通过SEL去找对应的方法。包装方式为:@selector(方法名),这里返回的就是SEl类型的数据,也就是SEL消息。

评分

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

查看全部评分

回复 使用道具 举报
悟中生有 发表于 2014-4-28 23:11
其实可这样理解:就是把方法包装成SEL类型的数据,SEL就相当于消息,如果要调用这个方法,就给发送一条SEL ...

那不同对象调用同一个方法,包装成的都是同一个sel吧,你说的这个我懂,就是把每一个方法都包装成sel,然后根据sel找到相应的类的方法。我想知道sel地址跟当前对象有关系吗?不同的对象都调用同一个函数,然后返回的都是同一个sel吗?
回复 使用道具 举报
悟中生有 发表于 2014-4-28 23:11
其实可这样理解:就是把方法包装成SEL类型的数据,SEL就相当于消息,如果要调用这个方法,就给发送一条SEL ...

如果我的猜测是对的,那是不是说明,一个类有几个方法,那就有几个sel!
回复 使用道具 举报
D调的沉默 发表于 2014-4-28 23:18
那不同对象调用同一个方法,包装成的都是同一个sel吧,你说的这个我懂,就是把每一个方法都包装成sel,然 ...

是通过调用SEL类型的对象,去找到与之对应的方法的地址,进而调用方法。一个方法的地址是唯一的,所以调用同一个方法,SEL当然也是同一个了。
回复 使用道具 举报
D调的沉默 发表于 2014-4-28 23:20
如果我的猜测是对的,那是不是说明,一个类有几个方法,那就有几个sel! ...

是的,可以这样理解,你也可以这样理解:SEL  类型传递的值是  @selector(方法名称),你可以把它理解成一个方法的钩子,通过方法名称找到对应的方法。
回复 使用道具 举报
每个类的方法列表都存储在类对象中 ,而每个方法都有一个与之对应的SEL类型的对象 ,根据这个SEL对象就可以找到方法的地址,进而调用方法
回复 使用道具 举报

技术分都30分得大神忽悠我不知道sel:@
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马