CO中的对象有3种
instance对象(实例对象)
-
instance对象就是通过alloc创建的对象
-
instance对象在内存中存储的信息包括:
- isa指针
- 其他成员变量值
class对象(类对象)
- 下面的objClass 就是类对象,一个类只有一个类对象,通过4种方法获取的类对象都是同一个对象。
#import <objc/runtime.h>
1、通过类方法
Class objClass = [NSObject class];
2、通过对象获取
NSObject *obj = [[NSObject alloc] init];
Class objClass = [obj class];
3、通过runtime的object_getClass获取
Class objClass = object_getClass(obj)
4、通过runtime的objc_getClass获取
Class objClass = objc_getClass("NSObject");
-
class对象在内存中存储的信息主要有:
- isa指针
- superclass指针
- 类的属性信息(@property)
- 类的对象方法信息(instance method)
- 类的协议信息(@protocol)
- 类的成员变量信息(ivar)
- 其他
meta-class对象(元类对象)
- 也是一个类对象,每个类也只有一个元类对象(meta-class)。
1、通过runtime 的 object_getClass 方法获取,传入相应的类的class对象(类对象)
Class objMetaClass = object_getClass([NSObject class])
2、通过runtime 的 objc_getMetaClass 方法获取
Class objMetaClass = objc_getMetaClass("NSObject");
3、 可以通过下面方法判断一个对象是否是元类对象
Bool isMetaClass = class_isMetaClass(objMetaClass)
- meta-class对象和class对象的内存结构是一样的,class对象中的对象方法、成员变量等信息在meta-class对象中为null,但用途不一样
-
meta-class对象在内存中存储的信息主要有:
- isa指针
- superclass指针
- 类的类方法信息(class method)
- 其他
网友评论