目录
OC 中对象的分类
instance 对象
类对象
元类对象
一 instance 对象
内存中包含哪些信息
- isa 指针
- 其他成员的变量
Student *stu1 = [[Student alloc]init];
以上的stu1 就是实例对象
二 类对象
以下就是类对象
- Class cls1 = [stu1 class];
- Class cls2 = object_getClass(stu1);
- Class cls3 = [NSObject class];
一个类的类对象是唯一的,只有一份,类对象在内存中有什么用呢?
内存中包含的信息
- isa 指针
- superclass 指针
- 类的属性信息(@property),类的对象方法信息(instance method)
- 类的协议信息(protocol),类的成员变量信息(ivar)
三 元类对象
metaClass
Class metaCls = object_getClass([NSObject class]);
元类对象有什么用呢?
+ (void)test;
像这种+开头的方法就是放到元类对象中的。
- (void)test;
这种方法是放到类对象中的。
元类对象和类对象内存结构是一致的吗,但是就是用途不一样,包含的信息不一样
- isa 指针
- superclass 指针
- 类的方法信息
- ......
使用runtime 判断是否是元类对象 class_isMetaClass
NSLog(@"%d",class_isMetaClass([NSObject class]));
总结:
无论是instance 对象 还是 class 对象 或者是 metaclass 对象,都有一个isa 指针,那么这个isa 指针指向什么地方呢?
1 instance的 isa 指向的是 class
当我们去创建一个类的对象并且去调用对象方法的时候,此时会通过instance 的isa 找到class,从而找到class 里面的对象方法进行执行
2 class 的 isa 指向meta-class
当调用类方法的时候,通过class的isa指针找到meta-class,进行调用类方法。
3 meta-class 的 isa 指向基类的meta-class 对象

1546

被折叠的 条评论
为什么被折叠?



