41_OC对象的分类,组成,获取方法

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对象

猜你喜欢

转载自blog.csdn.net/a_horse/article/details/82533821