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 ...
随机推荐
- Charles 的界面详解
后续补充.......... 一.主导航栏 1.File.Edit.View.Proxy.Tools.Window.Help 2.View栏 (1)structure视图是将网络请求按访问的域名分类: ...
- 2018-2019-2 20175211 实验二《Java面向对象程序设计》实验报告
目录 代码托管 一.单元测试 (1)三种代码 二.TDD(Test Driven Development,测试驱动开发) 三.面对对象三要素 四.练习 五.问题及解决 六.PSP 代码托管 一.单元测 ...
- CJSON parse.c
#include <stdio.h> #include <stdlib.h> #include "cJSON.h" void printJson(cJSON ...
- mysql优化:explain分析sql语句执行效率
Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看SQL语句的执行效 果,可以帮助选择更好的索引和优化查询语句,写出更好的优 ...
- java-redis
pom.xml添加如下配置: <dependency> <groupId>org.springframework.boot</groupId> <artifa ...
- QQ/微信中被禁止访问的网页怎么打开
为什么关心这种技术?因为我经常听到身边搞微商.搞微信项目的朋友都在叫苦连天,由于微信域名屏蔽.微信域名被拦截.弄得他们尸横遍野,损失的连过年回家的路费都没了,曾经的叱咤风云一下变成了今日的倒亏损.腾讯 ...
- C# 使用反射 遍历输出 对象的属性
代码: Type type = dgParent.GetType();//获取对象类型 PropertyInfo[] props = type.GetProperties();//获取属性集合 Str ...
- shell里连接数据库,将结果输出到变量
result=$(sqlplus -s 'ccc/ccc@21.96.34.34:1521'<<EOF ..... EOF )
- jQuery之Deferred对象P2
转自 https://www.cnblogs.com/losesea/p/4415676.html deferred对象是jQuery对Promises接口的实现.它是非同步操作的通用接口,可以被看作 ...
- CentOS7上手动部署入门级kubernetes
前言 翻看了很多的kubernetes的安装教程,也反复做了一些实验,深感教程之复杂,所以决定写一个极简版本的安装教程,目标在于用尽可能少的参数启动服务,并且剖析各组件关系,然后再在此基础上逐步添加参 ...