OC-SEL
2015-11-11 17:42
190 查看
SEL
SEL对应方法的地址
_cmd代表当前方法
1. 方法的存储位置
- 每个类的方法列表都存储在类对象中
- 每个方法都有一个与之对应的SEL类型的对象
- 根据一个SEL对象就可以找到方法的地址,进而调用方法
- SEL类型的定义
typedefstructobjc_selector *SEL;
2. SEL对象的创建
SEL s = @selector(test);
SEL s2 = NSSelector FromString(@"test");
3. SEL对象的其他用法
// 将SEL对象转为NSString对象
NSString *str = NSStringFromSelector(@selector(test));
Person *p = [Personnew];
// 调用对象p的test方法
[p performSelector:@selector(test)];
/* SEL其实是对方法的一种包装,将方法包装成一个SEL类型的数据,去找对应的方法地址。找到方法地址就可以调用方法 其实消息就是SEL */ #import <Foundation/Foundation.h> #import "Person.h" int main() { Person *p = [[Person alloc] init];//+test和-test。。。。有SEL s1、s2分别对应 //直接调用 [p test2]; // NSString *name = @"test2"; // // SEL s = NSSelectorFromString(name); // // [p performSelector:s]; // 间接调用test2方法 //[p performSelector:@selector(test2)]; //[p test3:@"123"]; //第三种调用方法: // SEL s = @selector(test3:); // // [p performSelector:s withObject:@"456"]; //第一种直接调用方法: [p test2]; // 1.把test2包装成SEL类型的数据 // 2.根据SEL数据找到对应的方法地址 // 3.根据方法地址调用对应的方法 return 0; }
NSLog输出增强
- __FILE__ :源代码文件名
- __LINE__ :NSLog代码在第几行
- _cmd :代表着当前方法的SEL
// 下面的代码会引发死循环
- (void)test{
[self performSelector:_cmd];
}
相关文章推荐
- 读书笔记之《Java并发编程的艺术》-java中的锁
- 读书笔记之《Java并发编程的艺术》-并发编程容器和框架(重要)
- 读书笔记之《Java并发编程的艺术》-线程池和Executor的子孙们
- Web 组件 Header
- AndroidMainfest.xml文件详解
- Ubuntu 14.04下,cscope搜索结果显示为空
- 浏览器hack
- Android利用Volley异步加载(JSON和图片)完整示例
- 关系数据库 OMRLite
- 面向对象的 JavaScript
- 树的重心
- 九度 oj 1123 采药
- 读书笔记之《Java并发编程的艺术》-并发编程基础
- Oracle 存储过程 无法编译 解决方法(转)
- 滑动,与用户直观交互
- 关于Android 软键盘覆盖布局问题
- php 在web端来播放amr语音(如微信语音)
- useradd命令
- Android-Universal-Image-Loader 学习笔记(五)线程池分析
- url后面带斜杠与不带斜杠有什么区别吗?