黑马程序员---OC类的本质
来源:互联网 发布:邪恶网站源码 编辑:程序博客网 时间:2024/05/16 05:50
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
创建代码(以图片展示):
第一步:
创建Goodstudent类 :Student类 :Person类 :NSObject (冒号代表继承关系),以及Person类的分类:Person+MyPersonCategory;
并且给每一个类都重写load和initialize类方法,以Person类为例,如下图:
第二步:
验证在main函数中,创建任何对象的时候,load和initialize方法的调用情况如何,如下图:
第三步:
我们来验证一下,使用Person类的时候,方法调用情况,如下图:
第四步:
我们使用Goodstudent类的时候,方法调用情况,如下图:
好的,那我们来总结一下方法调用的情况,以及类的本质的基础知识:
类也是一个对象
->其实类也是一个对象,是Class类型的对象,简称"类对象"
->Class类型的定义
typedef structobjc class *Class;
->类名就代表着类对象,每个类只有一个类对象.
任何对象都是有自己的类型,那么既然类也是一个对象,那它应该也有自己的类型
类是class类型的对象,简称类对象
利用Person类创建出三个对象,在内存中如下图所示:
任何对象在创建之前都会把类先加载进内存,利用Person类在内存中创建对象分为两步:
1.先利用class类型创建一个Person类对象(把Person类加载进内存)
2.再利用Person类对象创建Person类型的对象
1.调用对象的某个对象方法 对象的class 方法,返回class类型
Class c1 = [p1 class]; 此处的c1就是内存中的Person类
Class c2 = [p2 class];
打印c1和c2之后发现两者相等,所以说调用每一个Person对象获取的类都是一样的,内存中只有一个Person类,p1和p2都是Person类创建出来的对象,所以调用对象方法获取的类对象都是Person这个类
2.调用类方法
[Person class]; 通过类的class方法来获取内存中的类对象,此时,设置Class c3 = [Person class];打印结果和刚才的两个一样
类对象的使用
既然类对象就是类,那么类对象也就可以调用类的方法了
Class c = [p class]; // c是类对象,那么他就可以调用类方法+test了
[c test];
Person *p1 = [[c alloc] init]; // 此处的c就相当于是Person,用类对象来创建对象
类的加载和初始化
在程序一启动的时候,系统会把所有的类都加载一遍,那么如何看类加载的先后顺序呢?
在类加载完成时系统会调用一个类方法,+load方法,因此用load方法来验证类加载的先后顺序:在Student和Person类中都重写load方法,加载哪一个类就调用哪一个的load方法,同时输出类名加方法名,如
+ (void)load
{
NSLog(@"Person+load");
}
主函数中不写任何东西,直接点击运行,打印结果先是输出Person+load然后输出Student+load,再加入Person的分类进行验证,分类是最后加载的所以可以得出:
+load方法
1.当程序一启动时,就会加载项目中的所有类和分类,而且加载后会调用每个类和分类的+load方法,只会调用一次
2.先加载父类,再加载子类(先调用父类中+load方法,再调用子类的+load方法)
3.先加载原始类,再加载分类
4.不管程序运行过程中有没有用到这个类,都会调用+load方法加载
但是如果想知道什么时候使用了这个类,那么就要用到+initialize方法,它是用到某个类才加载时调用的方法,同样是在各个类中写入initialize方法并输出对应语句来验证,结果总结如下:
+initialize方法
1.当第一次使用某个类时,就会调用当前类的+initialize方法(使用到类,比如创建对象时)
2.先调用父类的+initialize方法,再调用子类的+initialize方法
3.优先调用分类的initialize方法
- 黑马程序员-OC-类的本质
- 黑马程序员---OC类的本质
- 黑马程序员IOS-OC语言-类的本质、SEL
- 黑马程序员-OC语言-类的本质(听课笔记)
- 黑马程序员---类的本质
- 黑马程序员--类的本质
- 黑马程序员——8、OC语言(分类、类的本质)
- 黑马程序员——OC基础——分类和类的本质
- 黑马程序员——OC基础语法—类的本质和SEL类型
- 黑马程序员——OC语言——分类和类的本质
- 09.黑马程序员-分类、类的本质
- 黑马程序员——类的本质
- 黑马程序员——类的本质
- 黑马程序员---Objective-C 类的本质
- 黑马视频学习笔记-OC-类的本质、description
- OC类的本质
- OC类的本质
- [黑马程序员][OC] 类
- 桶排序及C语言实现
- 第十四周项目——oj平台一——求矩阵对角线元素之和
- XMPP客户端库Smack 4.0.6版开发之四
- 保存应用程序的配置信息
- 阿里云RDS文档概述——数据库管理
- 黑马程序员---OC类的本质
- 小米会倒在三个专利火枪手面前吗?
- JVM内存管理-对象访问
- 第十四周项目 oj平台二——国家排序
- XMPP客户端库Smack 4.0.6版开发之五
- 第六届蓝桥杯校内选拔赛C/C++高职组解题(2)
- JDK1.6对脚本语言的支持(Mozilla Rhino)
- XMPP客户端库Smack 4.0.6版开发之六
- UNEXPECTED_KERNEL_MODE_TRAP(Ndu.sys) 蓝屏解决方案