IOS runtime运行机制详解(一)
OC运行机制是指,可以运行的时候动态调用函数。因为C语言必须在编译的时候就决定调用哪个函数。
我们平时写的OC代码,它在运行的时候也是转换成了runtime的方式运行的。任何方法调用本质:就是发送一个消息。(用runtime发送消息,OC底层通过runtime实现)每一个OC的方法,底层必然有一个与之对应的runtime运行方法。也就是说任何方法调用,都是转换为消息机制。
面试题:说说IOS 消息机制方法调用的过程:
1.OC在向一个对象发送消息时,runtime库会根据对象的isa指针来找到这个对象对应的类,或者父类中查找对应的方法。
2.注册方法编号(用编号的好处就是可以快速的查找)。
3.根据方法编号去查找对应的方法。
4.找到最终实现函数的地址,根据地址去方法区去调用对应的函数。
那么,一个OC对象的isa指针指向什么?有什么作用?
每个对象的内部都有一个isa指针,这个指针是指向他的真实类型。根据这个类的指针就能知道将来调用哪个类的方法。
总结:
1.每一个类本质上都是一个类的实例。其中类定义了成员变量和成员方法的列表。对象通过isa指针指向所属的类。
2.每一个类本质上都是一个对象。类其实是元类(meteClas)的实例。元类定义了类方法的列表。类通过类isa指针指向元类。
3.元类保存了类方法的列表。当类方法被调用的时候,会先从本身查找类方法的实现,如果没有找到,元类会向其父类查找该方法。需要注意的是,元类也是类,也是一个对象。
4.元类通过其isa指针指向他的根元类。(root meteClass)
5.根元类的isa指针指向了他本身。这样行程了一个封闭的内循环。
IOS runtime运行机制详解(一)的更多相关文章
- JavaScript运行机制详解
JavaScript运行机制详解 var test = function(){ alert("test"); } var test2 = function(){ alert(& ...
- PULL解析XML的运行机制详解
PULL解析简单易上手,基本上看一遍,基本上就会解析啦,但总是感觉对PULL解析的运行机制不是很了解,就总结了以下事件驱动到底是怎么执行的.. PULL: Android内置了PULL解析器.PULL ...
- Linux find运行机制详解
本文目录: 1.1 find基本用法示例 1.2 find理论部分 1.2.1 expression-operators 1.2.2 expression-options 1.2.3 expressi ...
- [转载]JavaScript 运行机制详解:再谈Event Loop
https://app.yinxiang.com/shard/s8/sh/b72fe246-a89d-434b-85f0-a36420849b84/59bad790bdcf6b0a66b8b93d5e ...
- 【朴灵评注】JavaScript 运行机制详解:再谈Event Loop
PS: 我先旁观下大师们的讨论,得多看书了~ 别人说的:“看了一下不觉得评注对到哪里去,只有吹毛求疵之感. 比如同步异步介绍,本来就无大错:比如node图里面的OS operation,推敲一下就 ...
- JavaScript 运行机制详解:再谈Event Loop
原文地址:http://www.ruanyifeng.com/blog/2014/10/event-loop.html 一年前,我写了一篇<什么是 Event Loop?>,谈了我对Eve ...
- JavaScript 运行机制详解:深入理解Event Loop
Philip Roberts的演讲<Help, I'm stuck in an event-loop>,详细.完整.正确地描述JavaScript引擎的内部运行机制. 一.为什么JavaS ...
- javascript运行机制详解: 再谈Event Loop(转)
作者: 阮一峰 日期: 2014年10月 8日 一年前,我写了一篇<什么是 Event Loop?>,谈了我对Event Loop的理解. 上个月,我偶然看到了Philip Roberts ...
- 如何通过setTimeout理解JS运行机制详解
setTimeout()函数:用来指定某个函数或某段代码在多少毫秒之后执行.它返回一个整数,表示定时器timer的编号,可以用来取消该定时器. 例子 ? 1 2 3 4 5 console.log(1 ...
随机推荐
- 阿里云RDS数据库改造迁移方案
1. 改造原因 (1) 由于历史原因, 本应该是同一个库的表分布在两个数据库中,需要对这两个库进行合并. (2) 已有的数据库性能无法满足业务的增长需要, 查询卡,慢问题突出. (3) 当前自建Mys ...
- go语言生成一张正弦图
先看效果: package main import ( "image" "image/color" "image/png" "lo ...
- datetime模块处理时间
python常用的处理时间的库有:datetime,time,calendar.datetime库包括了date(储存日期:(年.月.日),time(储存时间:(小时.分.秒和微秒),timedelt ...
- Tomcat配置Web默认页面
1.在web.xml中配置要加载的首页 <welcome-file-list> <welcome-file>Tiring-room/index.jsp</welcome- ...
- Kafka笔记4(消费者)
消费者和消费群组: Kafka消费者从属于消费者群组,一个群组里的消费者订阅的是同一个主题,每个消费者接收主题的一部分分区消息 消费者的数量不要超过主题分区的数量,多余的消费者只会被闲置 一个主题可以 ...
- test request&&response 代码实现
使用工具 IDEA 创建一个登录页面和后方数据库连接 1.编写login.html文件 导入到web文件夹下 设置配置文件 druid.properties 导入jar包 放置到web文件夹下 ...
- 蓝桥杯近3年决赛题之3(17年b组)
做的时候对了2个小题,一个大题可能会拿点分数. 1. 标题:36进制 对于16进制,我们使用字母A-F来表示10及以上的数字.如法炮制,一直用到字母Z,就可以表示36进制. 36进制中,A表示10,Z ...
- 设置VS2017背景图片
设置方法很简单:安装扩展ClaudiaIDE 1.在这里下载扩展,https://visualstudiogallery.msdn.microsoft.com/9ba50f8d-f30c-4e33-a ...
- linux 下常用的50条命令
1.find 查换文件.目录和权限 find . -name aaa.txt 在当前目录及子目录查找文件名为aaa.txt文件 find . -name "*.txt" -o -n ...
- 灵雀云:etcd 集群运维实践
[编者的话]etcd 是 Kubernetes 集群的数据核心,最严重的情况是,当 etcd 出问题彻底无法恢复的时候,解决问题的办法可能只有重新搭建一个环境.因此围绕 etcd 相关的运维知识就比较 ...