黑马程序员技术交流社区
标题: 复习的第三天,总结下SEL [打印本页]
作者: SailY 时间: 2014-9-10 20:39
标题: 复习的第三天,总结下SEL
SEL其实是对方法的一种包装,将方法包装成一个SEL类型的数据,去找对应的方法地址,找到方法地址就可以调用方法
方法的存储位置:
1. 每个类的方法列表都存储在类对象中
2. 每个方法都有一个与之对应的SEL类型的数据
3. 根据一个SEL数据就可以找到方法的地址,进而调用方法
每个方法内部都有个 SEL 类型的_cmd,代表当前方法
验证:
- (void)text2
{
NSString *str = NSStringFromSelector(_cmd);
NSLog(@"text2-----%@",str);
}
然后再main.m
Person *p = [[Person alloc]init];
[p text2];
结果打印str的值为text2,说明了_cmd就是代表当前方法,代码表示为_cmd ==@selector(text2);
注意:在text2内部这样写会死循环,[self performSelector:_cmd];
’
加深理解:
// 1.把text2包装成SEL类型的数据
// 2.根据SEL数据找到对应的方法地址
// 3.根据方法地址调用对应的方法
// [p text2];或者用下面的方法
[p performSelector:@selector(text2)];
// 有参数的话,可以用这两种方式
// [p text3:@"123"];
SEL s = @selector(text3:);
[p performSelector:s withObject:@"123"];
// 只知道方法名字符串,这样用
NSString *name = @"text";
SEL s = NSSelectorFromString(name);
[p performSelector:s];
综上,两种方法转换为SEL数据:
SEL s = @selector(text3:);
SEL s = NSSelectorFromString(name);
作者: 庄得超 时间: 2014-9-10 20:54
不错,一起学习
作者: 袁枭飞 时间: 2014-9-10 21:17
不错,可以看看
作者: sk0806 时间: 2014-9-10 22:55
肿么,,,,还有表情了
作者: 朱亚男 时间: 2014-9-11 09:19
不错……,,
作者: 我说你是个逗比 时间: 2014-9-11 12:37
总结的很细致
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |