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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Lbabywei1988 中级黑马   /  2015-3-19 17:43  /  1011 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

什么时候用,怎么用,为什么要用?

8 个回复

倒序浏览
他就是个指针,就是指的自己,比如指向当前的对象,或者类,你是要进IOS7期吗?
回复 使用道具 举报
黑色淘金 发表于 2015-3-19 23:08
他就是个指针,就是指的自己,比如指向当前的对象,或者类,你是要进IOS7期吗? ...

同学,你说的是self关键字,不是SEL。SEL是数据类型,用来包装方法的。
回复 使用道具 举报
面试问的么....不是吧,,
回复 使用道具 举报
初学阶段,我觉得只要理解SEL是什么,还有一些基本用法就行了。实际运用SEL也就是调用方法的一种方式。
一下是我总结的一些知识,希望对你有帮助。
SEL数据类型
一个SEL类型的数据就代表一个方法。
SEL其实是对方法的一种包装,将方法包装成一个SEL类型的数据,去找对应的方法地址。找到方法地址就可以调用方法。可以直接拿到方法地址就不用先包装成SEL类型的数据了,大大减少性能的开销。用到的其实是C语言的一些高级特性。
其实消息就是SEL

1.方法的存储
在类对象中有方法列表,每个方法都有一个和它对应的SEL数据,SEL数据(对象)对应的是方法的地址
[p test2] 发送消息实际就是发送一个SEL类型的数据
1>首先会把test2这个方法名包装秤SEL类型的数据。
2>根据SEL数据去类中找和它对应的方法地址。
3>根据方法地址调用方法。
这个操作是由缓存的。首次找会挨个找,很耗性能。第再次找得时候它会使用上一次的查询结果。
2.价值,使用方法
间接调用方法
首先将方法名包装成一个SEL类型的数据,通过@selector(方法名). SEL s = @selector(test2);
[p performSelector:@selector(test2)]; 这样也可以调用test2方法
带参数(冒号也是方法名的一部分)
[p performSelector:@selector(test3:) withObject:@“223”];
3.其他用法
1>知道一个方法名的字符串形式也可以调用一个方法
NSString *name = @“test2”;
SEL s = NSStringFromSelector(@“test2”);
2>每个方法内部都有一个隐藏的SEL类型的_cmd数据,这个数据代表当前方法。_cmd ==@selector(当前方法名)
NSString *str = NSStringFromSelector(_cmd); 将SEL数据转化成字符串。
回复 使用道具 举报
那些表情是:  冒号 圈a(at)
回复 使用道具 举报
完美世界 发表于 2015-3-20 08:19
初学阶段,我觉得只要理解SEL是什么,还有一些基本用法就行了。实际运用SEL也就是调用方法的一种方式。
一 ...

讲的好,赞一个
回复 使用道具 举报
你知道知道SEL是一个对象,对象调用方法其实是需要SEL的,因为SEL对象里面存储着方法的地址。最后任何对象都可以调用performselector(test),test是方法名的意思。
回复 使用道具 举报
完美世界 发表于 2015-3-20 08:19
初学阶段,我觉得只要理解SEL是什么,还有一些基本用法就行了。实际运用SEL也就是调用方法的一种方式。
一 ...

难道没人点赞吗
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马