Objective-C是一门面向对象的编程语言,每一个对象都是一个类的实例。XCode中打开objc.h可以看到如下定义:

/// An opaque type that represents an Objective-C class.
typedef struct objc_class *Class; /// Represents an instance of a class.
struct objc_object {
Class isa OBJC_ISA_AVAILABILITY;
}; /// A pointer to an instance of a class.
typedef struct objc_object *id;

每个对象包含一个isa指针,指向该对象的类。XCode中打开runtime.h可以看到类的定义:

struct objc_class {
Class isa OBJC_ISA_AVAILABILITY; #if !__OBJC2__
Class super_class OBJC2_UNAVAILABLE;
const char *name OBJC2_UNAVAILABLE;
long version OBJC2_UNAVAILABLE;
long info OBJC2_UNAVAILABLE;
long instance_size OBJC2_UNAVAILABLE;
struct objc_ivar_list *ivars OBJC2_UNAVAILABLE;
struct objc_method_list **methodLists OBJC2_UNAVAILABLE;
struct objc_cache *cache OBJC2_UNAVAILABLE;
struct objc_protocol_list *protocols OBJC2_UNAVAILABLE;
#endif } OBJC2_UNAVAILABLE;

类也包含一个isa指针。可以看出,类也是一个对象。那么类的类是什么呢?在OC中,类的类称为元类(metaclass)。

元类也是一个对象,也有isa指针。元类的isa指针指向元类的类,根元类(root metaclass)。

根元类也有isa指针,只是根元类的isa指针指向自己。上图说话。

这里,可以把Root class看成NSObject。

最新文章

  1. Linux下查看版本号,查看存在的普通用户
  2. CGContext 解释
  3. MongoDB,客户端工具备份数据库
  4. 十分钟搞懂什么是CGI
  5. JavaScript学习之窗口
  6. jquery树形菜单完整代码
  7. [Java] 03 String获取文件后缀名,判断文件是否合法
  8. bottle + vue.js 打造你的单页应用
  9. PHP remove,empty和detach区别
  10. [置顶] oracle存储过程中单引号及字符串拼接处理
  11. C语言程序代写(Linux下线程)
  12. T-SQL性能调整——信息收集
  13. socket套接字编程
  14. Spring -- 配置bean的三种方法
  15. PBRT笔记(11)——光源
  16. Cpp Generals 1.2
  17. JVM 字节码(三)异常在字节码中的处理(catch 和 throws)
  18. 网页打印样式CSS
  19. canvas高斯模糊算法
  20. spring3-mvc-maven-hello-world-master mvn jetty:run 及 mvn war:war 指令

热门文章

  1. 结束基础,开始MVC之旅!
  2. 一文回顾Reids五大对象(数据类型)
  3. O - Navigation System CodeForces - 1321D
  4. div3--C. Pipes
  5. Python 3.9 性能优化:更快的 list()、dict() 和 range() 等内置类型
  6. 65535与TCP连接数的关系测试结论
  7. lua 逻辑运算 and, or, not
  8. Windows线程+进程通信
  9. 批量重命名脚本(Python)
  10. eclipse git 文件状态 及git分支的创建与合并与删除