OC学习:SEL类型数据和selector的用法
来源:互联网 发布:网站如何做谷歌优化 编辑:程序博客网 时间:2024/05/16 23:31
Objective-C中调用函数的方法是“消息传递”,这个和普通的函数调用的区别是,你可以随时对一个对象传递任何消息,而不需要在编译的时候声明这些方法。所以Objective-C可以在runtime的时候传递人和消息。
一、SEL
每个SEL类型数据都是一个方法。
SEL就是对方法的一种包装。包装的SEL类型数据它对应相应的方法地址,找到方法地址就可以调用方法。在内存中每个类的方法都存储在类对象中,每个方法都有一个与之对应的SEL类型的数据,根据一个SEL数据就可以找到对应的方法地址,进而调用方法。
注意:
这个过程是有缓存的,第一次找SEL对应的方法是逐条找,比较耗性能,但是找过一次之后,便会留下缓存数据,再找就直接访问缓存了。
例如,声明方法:
@interface Person : NSObject + (void)test1; - (void)test2; - (void)test3:(NSString *)abc;@end
实现后,像如下一样直接调用:
Person *person = [[Person alloc] init]; [p test1];
二、selector
上例中,也可这样利用selector来间接调用:
[p performSelector: @selector(test2)];
同样调用test3可以这样:
[p test3: @"123"];
或:
[p performSelector:@selector(test3:) withObject:@"123"];
这样,我们就可以通过一个方法名字符串来调用此方法:
NSString *name = @"test2";SEL s = NSSelectorFromString(name);[p performSelector:s];
其实每个方法内部都有一个_cmd变量,其是SEL类型变量,代表当前方法。
NSString *str = NSStringFromSelector(_cmd);NSLog(@"%@",str);
上面的打印语句就是将当前的方法名打印出来,这里的_cmd其实就相当于@selector(test2)。
所以,其实消息就是SEL。
0 0
- OC学习:SEL类型数据和selector的用法
- OC学习笔记06--OC运行时中类的加载、初始化 和方法调用机制,SEL类型
- 记录Objective-C里SEL和Selector的用法
- 记录Objective-C里SEL和Selector的用法
- OC基础学习——SEL(选择器类型)和Class的学习
- OC - SEL类型的使用
- OC学习笔记SEL类型初步理解
- SEL和selector的简单使用
- SEL 和 @selector
- OC-SEL类型
- OC-033.SEL类型
- Objective-C中Selector基本概念和操作(SEL类型)
- iOS基础--SEL 类型 @selector()
- OC SEL (@selector) 原理及使用总结
- 黑马程序员——OC基础语法—类的本质和SEL类型
- Objective-C学习笔记之SEL和@selector
- OC中类的深入研究和SEL基本用法总结
- OC语言--SEL类型小记
- JDK/ADT Android开发环境搭建
- 第十一周【项目4 - 类族的设计】(1)
- 利用SHP2SDO将数据导入到Oracle数据中
- 网络敲诈和有偿删帖——从表面看到底层
- linux c++编译
- OC学习:SEL类型数据和selector的用法
- weblogic 域乱码问题解决------linux 设置中文字符集
- 欢迎使用CSDN-markdown编辑器
- const关键字
- 正则表达式(收集)
- 东风153系列油罐车新车走合注意事项
- 设计模式六大原则(5):迪米特法则
- SQL优化经典案例----树形查询优化
- spring,mybatis事务管理配置与@Transactional注解使用