黑马程序员----Objective-C学习笔记之类的本质与SEL类型
来源:互联网 发布:广告公司设计软件 编辑:程序博客网 时间:2024/06/06 04:10
一、类的本质
1、类的本质
类的本质其实也是一个对象(类对象),是Class类型
【类对象】
1)类对象在程序运行时一直存在
2)类对象是一种数据结构,存储类的基本信息:类大小,类名称,类的版本信息,以及消息和函数的映射表等
2、类对象如何获取
1)通过实例对象获取
例如:
Animal *ani = [Dog new]; Animal *ani2 = [Dog new]; Class ac = [ani class]; Class ac2 = [ani2 class]; NSLog(@"ac = %p", ac); NSLog(@"ac2 = %p", ac2); NSLog(@"Dog = %p", [Dog class]);
打印结果:
2015-10-04 22:38:57.712VariableClass[2302:303] ac = 0x100001330
2015-10-04 22:38:57.714VariableClass[2302:303] ac2 = 0x100001330
2015-10-04 22:38:57.716VariableClass[2302:303] ac2 = 0x100001330
2)通过类名获取
见1)中NSLog(@"Dog = %p", [Dogclass]);
3、类对象的使用
例如:
Animal *ani = [Dog new]; Class ac = [ani class]; Dog *dog = [ac new]; [dog bark];
打印结果:
2015-10-04 22:43:38.948 VariableClass[2355:303] Wangwang...
分析结果:
可知类对象ac可以当Dog类用,可以创建Dog实例对象
二、SEL类型
SEL:全程selector表示方法的存储位置
寻找方法的过程:
1)先把方法封装成一个SEL类型的数据
2)根据SEL数据找到对应的方法地址
3)根据方法地址调用相应的方法
4)【注意】在这个操作过程中有缓存,第一次找得时候是一个一个的找,非常消耗性能,之后再用到的时候就直接使用。
【注意】SEL其实是对方法的一种包装,将方法包装秤一个SEL类型的数据,去寻找对应的方法地址,找到方法地址就可以调用方法,这些都是运行时的特性,发消息就是发送SEL,然后根据SEL找到地址,调用方法。
例如:
Dog *dog = [Dog new]; [dog bark]; SEL sel = @selector(bark); [dog performSelector:sel];
打印结果:
2015-10-04 23:02:58.856 VariableClass[2437:303] Wangwang...
2015-10-04 23:02:58.859 VariableClass[2437:303] Wangwang...
- 黑马程序员----Objective-C学习笔记之类的本质与SEL类型
- Objective-C基础学习笔记(七)-类的本质与SEL
- 【黑马程序员】Objective-C语言学习笔记之类(二)
- 黑马程序员——Objective-C学习之类的继承
- Objective C的SEL类型
- 黑马程序员---Objective-C 类的本质
- 黑马程序员----objective-C description NSLog SEL
- 黑马程序员----Objective-C学习笔记之动态类型检测
- 黑马程序员——OC基础语法—类的本质和SEL类型
- 【Objective-C学习笔记】核心语法——点语法、id类型、SEL类型
- 黑马程序员一分类,类的本质,description,SEL
- 黑马程序员IOS-OC语言-类的本质、SEL
- 黑马程序员——Objective-C——Category、SEL
- 黑马程序员---Objective-C学习笔记之一
- Objective-C - SEL (@selector) 原理及本质
- 黑马程序员-OC语言-SEL类型(听课笔记)
- 黑马程序员--C语言里的类型转换学习笔记
- 黑马程序员学习笔记_OC之类方法
- Nine Million Bicycles
- VS .NET SUTDIO install CONFIG
- Sorting Lists2
- HttpClient的应用1
- Configure MS SQL Server 2005 Rem…
- 黑马程序员----Objective-C学习笔记之类的本质与SEL类型
- 找回丢失的“显示桌面”图标
- 找回丢失的“显示桌面”图标
- clipMarkTest
- 待机与休眠的区别
- Square开源Viewfinder,25万行代码全公布
- 2009年05月27日
- jsp/servlet session
- 好久没上来了