问题: 简述一下iOS对象的分类


iOS对象大致可以分为3类,分别是实例对象(instance-object)、类对象(class-object)、元类对象(meta-class-object).

实例对象主要存储的是 isa指针、成员变量的值信息.

类对象主要存储的内容含有 isa指针、superclass指针、类的属性列表信息、类的对象方法列表、类的协议信息以及类的成员变量信息等.每个类内存中有且只有一份类对象.

元类对象主要存储的内容含有 isa指针、 superclass指针、类的类方法列表.每个类内存中有且只有一个元类对象.

#import <objc/runtime.h>

// 获取元类对象
Class metaClass = object_getClass([NSObject class]);

// 判断某个对象是否是元类对象
BOOL isMetaClass = class_isMetaClass(metaClass);

注意: 想要获取元类对象只能使用runtime库中的 object_getClass 方法,不能直接使用 NSObject 的 class 方法. NSObject的class方法只能只会获取到类对象,不能获取到元类对象,这个调用关系与superclass指针的指向有关.

object_getClass 和 objc_getClass 的区别:

传入参数不同,object_getClass需要传入一个对象(Object),objc_getClass需要传入一个类名(ClassName)

object_getClass 方法根据isa指针来寻找Class,更加的灵活.


IT界无底坑洞栋主 欢迎加Q骚扰:676758285