OC类的本质
来源:互联网 发布:mac字典扩充下载 编辑:程序博客网 时间:2024/06/05 08:11
类的本质
1,类也是个对象> 其实类也是一个对象,是Class类型的对象,简称“类对象”
> Class类型的定义
typedef struct objc class *Class;
> 类名就代表着类对象,每个类只有一个类对象
2,获取类对象的2种方式
(1),Class c = [Person class];
(2),Person *p = [Person new];
Class c2 = [p class];
3,类对象方法举例
类对象调用类方法
Class c = [Person class];
Person *p2 = [c new];
+load和+initialize方法
1,程序启动时,就会加载项目中所有的类和分类,而且加载后会调用每个类和分类的+load方法。只会调用一次
2,当第一次使用某个类时,就会调用当前类的+initialize方法
3,先加载父类,再加载子类(先调用父类的+load方法,再调用子类+load方法)
先初始化父类,再初始化子类(先调用父类的+initialize方法,再调用子类的+initialize方法)
description方法
默认情况下,利用NSLog和%@输出对象时,结果是:<类名:内存地址>
1,会调用对象P的-description方法
2,拿到-description方法的返回值(NSString *)显示到屏幕上
3,-description方法默认返回的时“类名+内存地址”4,+description决定了类对象的输出结果
5,description方法体里面不能输出self,会造成死循环
6,方法示例
- (NSString *)description {
return [NSString stringWithFormat:@"name-%@",_name];
}
NSLog输出补充
输出行号
NSLog(@"%d",_LINE_);
输出当前函数名
NSLog(@"%s",_FUNC_);
输出源文件的名称
NSLog输出c语言字符串的时候,不能有中文
NSLog(@"%s",_FILE_);
SEL
原理
> SEL其实是对方法的一种包装,将方法包装成一个SEL类型的数据,去找对应的方法地址,找到方法地址就可以调用方法> 每个类方法列表存储在类对象中
> 每个类的方法都有一个与之对应的SEL类型的对象
> 根据一个SEL对象就可以找到方法的地址,进而调用方法
> SEL类型的定义 typedef struct obic selector *SEL;
1,SEL使用
当对象调用方法时
(1),把方法包装SEL类型的数据
(2),根据SEL数据找到对应的方法地址
(3),根据方法地址调用对应的方法
调用方法可以用两种方式
直接用对象调用
[p test]
间接调用
[p performSelector:@selector(test)];
2,SEL对象的创造
SEL s=@selector(test);
SEL s2 = NSSelectorFromString(@"test");
3,SEL对象的其他用法
// 将SEL对象转为NSString对象
NSString *str = NSStringFromSelector(@selector(test));
Person *p=[Person new];
// 调用对象P的test方法
[p performSelector:selector(test)];
4,SEL 类型_cmd代表着当前方法
[self performSelector:_cmd]; 死循环
0 0
- OC类的本质
- OC类的本质
- oc006---oc类的本质
- 黑马程序员-OC-类的本质
- 黑马程序员---OC类的本质
- 黑马视频学习笔记-OC-类的本质、description
- OC基础-类的本质+description+SEL
- IOS开发---OC语言-⑯类的本质
- OC核心语法(3)分类和类的本质
- 黑马程序员IOS-OC语言-类的本质、SEL
- 黑马程序员-OC语言-类的本质(听课笔记)
- JAVA、OC的内存管理机制的本质
- OC消息机制(本质的实现方式)
- oc学习总结之类的本质
- OC 和 C 的本质区别
- oc - 5 构造方法 分类 类的本质 类的深入
- OC中类的Self 和 Super调用方法的本质
- 【探索】- (类的本质)尝试用C实现一个OC类
- LeetCode 90. Decode Ways
- 2014年辛星解读Javascript之DOM之事件绑定
- LeetCode 91. Subsets
- OC构造方法、Category
- CodeForce Round 257 div1
- OC类的本质
- developing OpenGL using makefile
- 无锁编程介绍
- Eclipse背景颜色修改
- 辛星和大家一起探讨一下程序员这个行业
- 规范化的恢复更好更符规和规范
- 是国际上的风格来看就行可立即
- 虹湖洧灞是夺取
- fdsfgfhfjffdhfj