runtime 的快速理解与使用

首先是runtime 的概念

RunTime简称运行时,就是系统在运行的时候的一些机制,其中最主要的是消息机制。

runtime的运行机制

先看下类对象的定义

typedef struct objc_class *Class;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;

接下来看一个实例方法的调用都经历了什么?

Person *p = [[Person alloc] init];
[p eat];

编译后实际是这样

objc_msgSend(p, selector)

官方文档

id objc_msgSend(id self, SEL op, ...)

参数
self 消息的接收者
op 消息的selector,一个C的字符串用来定位
… 消息传入参数的数组

接下来就是查找这个消息执行体
就是这一行

struct objc_method_list **methodLists OBJC2_UNAVAILABLE;

OC的对象通过isa找到类对象,类对象查找自己存储的方法列表来找到对应的方法执行体,方法执行体执行具体的代码,并返回值给调用者。

类方法又是如何处理的?

可以看得到这一行

 Class isa  OBJC_ISA_AVAILABILITY;

这个isa指向的一个Class类型,就是保存了类方法的地方。这个Class类型的东西就是类元对象,类元对象会查找自己存储的方法列表来找到对应的方法执行体

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,885评论 0 9
  • 这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的...
    西木阅读 30,779评论 33 466
  • 参考链接: http://www.cnblogs.com/ioshe/p/5489086.html 简介 Runt...
    乐乐的简书阅读 6,476评论 0 9
  • 土地承载着万物,耕地哺育众生, 在这个特殊日子,再隆重庆祝不为形式, 只想政策惠及百姓,让耕地子孙延承。 百年煤城...
    枯藤残鸦阅读 4,900评论 0 5
  • 最近中了无尾熊CP的毒奶,躺在深坑将近一周,每天流连于贴吧、微博和B站,茶饭不思,日夜不分,简直神经。 贴吧里看到...
    独镜子阅读 1,819评论 0 0

友情链接更多精彩内容