整理几个方法:
假设有一个类。Person。Person类存在一个实例Person *p
方法1: [Person class];
方法2: [p class];
方法3: object_getClass(p);
方法4: class_isMetaClass([p class]);
整理几个名词:
名词1:类对象
名词2:元类对象
名词3:实例对象
方法定义:
OBJC_EXPORT BOOL class_isMetaClass(Class cls) 用于判断Class对象是否为元类
OBJC_EXPORT Class object_getCLass(id obj) 用于获取对象的isa指针指向的对象
名词解释:
这里主要对名词1和名词2做一个简单的理解
类对象:主要包含类的isa指针,类的父类的isa指针,属性,实例方法,协议信息等内容。
元类对象:主要包含isa指针,元类的父类的isa指针,类方法等信息。
理解:
从方法定义上看,方法1和方法2返回的都为Class类对象 根据代码判断,两个方法返回的均为isa指针指向的类对象
类对象的isa指针指向的则是元类。
类方法的信息存储在元类对象中,调用用户定义的某一个类方法的时候。如:Person类。Person类对象通过isa指针找到Person元类对象。
总结:
参考网址:
网友评论