1,实例对象
1,组成
- isa指针:所有继承自NSObject的对象都有
- 成员变量
2,通过alloc来获取
2,类对象
1,组成:
- 1,isa指针;
- 2,superClass指针;
- 3,类的属性信息;
- 4,类的对象方法信息;
- 5,类的协议信息;
- 6,类的成员变量信息(名称,类型等,不包含值)
2,获取方法
- 1,类的class方法: [NSObject class]
- 2,实例对象的class方法: [object1 class]
- 3,runTime方式:object_getClass(实例变量)
3,元类对象
1,组成:(与类对象的结构组成一致,都为class类型,其他的)
- 1,isa指针;
- 2,superClass指针;
- 3,类的类方法信息;
2,获取方法
object_getClass(类对象)
3,判断方法,是否是元类对象
class_isMetaClass
4,object_getClass为什么能根据传入的值不一样,得到类对象和元类对象不用的结果?
原因:底层调用方法不一样,如下
1.Class objc_getClass(const char *aClassName)
1> 传入字符串类名
2> 返回对应的类对象
2.Class object_getClass(id obj)
1> 传入的obj可能是instance对象、class对象、meta-class对象
2> 返回值
a) 如果是instance对象,返回class对象
b) 如果是class对象,返回meta-class对象
c) 如果是meta-class对象,返回NSObject(基类)的meta-class对象