问题: 简述一下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,更加的灵活.
Comments | 0 条评论