面向对象编程的三大特性:
继承,封装,多态(还有一个抽象)
类的本质
类的本质其实也是一个对象(类对象):
1.类对象在程序运行时,一致存在
2.类对象是一种数据结构,存储类的基本信息:类的大小,类的名称,类的版本,类的消息与函数的映射表
3.类对象保存的信息在程序编译时确定,在第一次使用该类的时候被加载到内存中
4.类对象代表类,class代表类对象,类方法属于类对象
5.如果消息的接受者是类名,则类名代表类对象
6.运行时,所有累的额实例都有类对象生成,类对象会把实例的isa的值修改成自己的地址
7.从类对象里可以知道父类信息,可以响应方法等
8.类对象正能使用类方法,不能使用实例方法
类对象的使用
1.原来使用类名可以做的事情
(1)创建实例对象
Person *p = [Person new];
(2)调用类方法
[Person test];
2.更进一步的使用
Person *p = [Person new];
Class c1 = [p class];//c1就是Person,他是个类
Class c1= [Person class];//获取对象
Person *p = [c1 new];//实用类对象穿件实例对象
[p test];//结果是打印-test方法,也就是调用的是对象方法
[c1 test];//结果是打印+test方法,也就是调用的类方法
类对象的存储
SEL类型
全称:方法的存储位置。
验证方法:
SEL s1 = @selector(test);//手动将test方法包装成SEL类型
[p perfomselector:s1];//响应
继承,封装,多态(还有一个抽象)
类的本质
类的本质其实也是一个对象(类对象):
1.类对象在程序运行时,一致存在
2.类对象是一种数据结构,存储类的基本信息:类的大小,类的名称,类的版本,类的消息与函数的映射表
3.类对象保存的信息在程序编译时确定,在第一次使用该类的时候被加载到内存中
4.类对象代表类,class代表类对象,类方法属于类对象
5.如果消息的接受者是类名,则类名代表类对象
6.运行时,所有累的额实例都有类对象生成,类对象会把实例的isa的值修改成自己的地址
7.从类对象里可以知道父类信息,可以响应方法等
8.类对象正能使用类方法,不能使用实例方法
类对象的使用
1.原来使用类名可以做的事情
(1)创建实例对象
Person *p = [Person new];
(2)调用类方法
[Person test];
2.更进一步的使用
Person *p = [Person new];
Class c1 = [p class];//c1就是Person,他是个类
Class c1= [Person class];//获取对象
Person *p = [c1 new];//实用类对象穿件实例对象
[p test];//结果是打印-test方法,也就是调用的是对象方法
[c1 test];//结果是打印+test方法,也就是调用的类方法
类对象的存储
其实类对象isa指针并不是指向代码区,而是指向源类的Class
类对象中存在大量的SEL,如下图所示:
SEL类型
全称:方法的存储位置。
验证方法:
SEL s1 = @selector(test);//手动将test方法包装成SEL类型
[p perfomselector:s1];//响应