runtime

你需要先看一下c语言的结构体指针
元类,类,实例对象,很棒

  • 当你给对象发送消息时,消息是在寻找这个对象的类的方法列表。
  • 当你给类发消息时,消息是在寻找这个类的元类的方法列表。

  1. 元类是必不可少的,因为它存储了类的类方法。每个类都必须有独一无二的元类。
  2. 所有的元类都使用根元类(继承体系中处于顶端的类的元类)作为他们的类。
  3. 这就意味着所有NSObject的子类(大多数类)的元类都会以NSObject的元类作为他们的类

isa指针

  • 实例对象的isa --> 类
  • 类的isa指针 --> 元类
  • 元类的isa指针 -->根元类
  • 根类的isa指针 -->根元类
  • 根元类的isa指针 --> 根元类自己

superclass指针

  • 实例对象 --> 无superclass
  • 类的superclass指针 --> 父类
  • 根类superclass指针 --> nil
  • 元类superclass指针 --> 元类的基类的父类的元类
  • 根元类superclass指针 --> 根元类的基类

Greg Parker给出了一份精彩的元类,类,实例对象图谱来展示这些关系


详解 Objective-C 中的 Runtime
深入Objective-C的动态特性

初学 Objective-C 时把[receiver message]当成简单的方法调用,而无视了“发送消息”这句话的深刻含义。其实[receiver message]会被编译器转化为:

objc_msgSend(receiver, selector)

如果消息含有参数,则为:

objc_msgSend(receiver, selector, arg1, arg2, ...)

【OC刨根问底】-Runtime简单粗暴理解

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的...
    西木阅读 30,712评论 33 466
  • 我们常常会听说 Objective-C 是一门动态语言,那么这个「动态」表现在哪呢?我想最主要的表现就是 Obje...
    Ethan_Struggle阅读 6,577评论 0 7
  • 原文出处:南峰子的技术博客 Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了...
    _烩面_阅读 5,060评论 1 5
  • Objective-C语言是一门动态语言,他将很多静态语言在编译和链接时期做的事情放到了运行时来处理。这种动态语言...
    tigger丨阅读 5,317评论 0 8
  • 2017.11.2 PPT学习群又开始活跃了,本周日要考试,让大家提前复习。早晨又爬了起来,听了一个小时的课。听起...
    灸灸微笑阅读 767评论 0 0