本文源自本人的学习记录整理与理解,其中参考阅读了部分优秀的博客和书籍,尽量以通俗简单的语句转述。引用到的地方如有遗漏或未能一一列举原文出处还望见谅与指出,另文章内容如有不妥之处还望指教,万分感谢。
meta-class对象又称之为元类对象
注意点:
1. 元类对象的获取需要通过object_getClass() 来获取,而不是通过重复调用class方法。
2. 上图中说到meta-class对象和class对象的内存结构相同,图中有四个 null 代表的就是属性方法信息、协议信息是null;简单来说就是class对象有的在meta-class对象这里是空的。结构相同,但数据不同,用途也不同。
3. 如何判断一个类是否是一个元类对象 ?
须知:UIButton 实例对象的类对象是 UIButton;UIButton类对象的元类对象是UIButton
object_getClass(<#id _Nullable obj#>)和objc_getClass(<#const char * _Nonnull name#>) 的区别
object_getClass 传入参数是一个oc对象,用来获取类对象和元类对象的;传入实例对象获取到类对象,传入类对象获取到元类对象
objc_getClass 传入的是一个类名(C语言字符串),是用于查找一个类的, 如果找到了以这个字符串命名的类就返回该类, 找不到就返回nil