Runtime常用方法个(更新中)未完待续。。。

runtime是个很屌的东西,但是也并不是很高深的东西,iOS学到一定程度不可避免的就要搞它了,经过最近几个月频繁的学习和去了解,逐渐解开了runtime的神秘面纱,让我们一探究竟吧。

runtime叫做运行时,好多语言都有运行时,我也不知道除了OC还有啥,哈哈哈,顾名思义,运行的时候,其实也就是程序运行的时候所发生的一些事,OC的运行时主要是消息转发机制。

OC这个语言我们平时都写.h和.m,一个是interface一个是implement,我们都在.h定义接口啊,声明属性,定义方法啥的,然后.m里面写上具体的实现细节,我的理解,首先,我们写的OC,到运行时都变成C语言,然后调用方法都是发消息,大概是有个方法列表,列表里对应有一个方法实现的指针IMP,然后,调用方法就是objc_msgsend,也就是OC中所有方法都是发消息实现的

1.发送消息

// 创建person对象

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

// 调用对象方法

[p eat];

// 本质:让对象发送消息

objc_msgSend(p,@selector(eat));

// 调用类方法的方式:两种

// 第一种通过类名调用

[Person eat];

// 第二种通过类对象调用

[[Person class]eat];

// 用类名调用类方法,底层会自动把类名转换成类对象调用

// 本质:让类对象发送消息

objc_msgSend([Person class],@selector(eat));

原理:方法在runtime里面调用的是

比如:

objc_msgSend([Person class],@selector(eat));

实际上:

objc_msgSend(XXXXXX,@selector(YYYYYY));

XXXX就是就收消息的对象,YYYYY就是就收消息后执行的方法,所以比如这里的@selector()实际上是一个SEL,这个东西好像是对应一个数也不一个字符串的,然后根据这个东西,runtime运行时的时候,找这个方法,然后每个方法对应他的执行代码的一个IMP指针,然后再执行。

2.交换方法

这个方法的实现主要就是取到方法对应的IMP实现通过method_exchangeImplementations

交换实现,进而实现方法的交换。

3.添加方法

4.不需要引入某个类的头文件,直接初始化该类对象

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

推荐阅读更多精彩内容

  • 对于从事 iOS 开发人员来说,所有的人都会答出【runtime 是运行时】什么情况下用runtime?大部分人能...
    梦夜繁星阅读 9,082评论 7 64
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,808评论 0 9
  • 参考链接: http://www.cnblogs.com/ioshe/p/5489086.html 简介 Runt...
    乐乐的简书阅读 6,445评论 0 9
  • 本文分为4个部分 1.介绍OC和C语言之间的转换 2.介绍运行时和相关术语 3.介绍消息发送机制已及怎样找到函数实...
    一片枫叶随风舞阅读 2,532评论 0 1
  • 文|石忆 我们每个人都一样,都要独自度过些孤单的日子,你一个人吃饭,每到饭点,都去同一家餐厅,点一份同样的套...
    石忆_阅读 3,749评论 12 22