当前位置:   article > 正文

OC 技术 RunTime详解(代码)_oc runtime

oc runtime

一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络,希望未来技术之巅上有你们也有我。

在这里插入图片描述

今天下定决心写一篇runtime的文章来记录一下runtime的用法吧。刚开始觉得runtime很高大上很深奥的样子,其实,理解使用之后还是这个样子。在写之前也看多几篇网上的文章,有些写的很好,可以缺乏源码,就只有个别说明,感觉模拟两可,有些只是说到一部分,成分残缺一样,不过还是自己亲自写一篇好,起码我真能理解到这里。

首先先说一下runtime的基本概念。借网上的一段话。

一:基本概念

Runtime基本是用C和汇编写的,可见苹果为了动态系统的高效而作出的努力。你可以在这里下到苹果维护的开源代码。苹果和GNU各自维护一个开源的runtime版本,这两个版本之间都在努力的保持一致。Objective-C 从三种不同的层级上与 Runtime 系统进行交互,分别是通过 Objective-C 源代码,通过 Foundation 框架的NSObject类定义的方法,通过对 runtime 函数的直接调用。大部分情况下你就只管写你的Objc代码就行,runtime 系统自动在幕后辛勤劳作着。

RunTime简称运行时,就是系统在运行的时候的一些机制,其中最主要的是消息机制。
对于C语言,函数的调用在编译的时候会决定调用哪个函数,编译完成之后直接顺序执行,无任何二义性。
OC的函数调用成为消息发送。属于动态调用过程。在编译的时候并不能决定真正调用哪个函数(事实证明,在编 译阶段,OC可以调用任何函数,即使这个函数并未实现,只要申明过就不会报错。而C语言在编译阶段就会报错)。
只有在真正运行的时候才会根据函数的名称找 到对应的函数来调用。

接下来说一下,runtime里面提供给我们的api有哪些,这些api我基本都会举例子来去用一下它的

主意:
C语言是一门静态语言,声明的方法必须要有实现,才能调用,不然连编译都不通过
在这里插入图片描述
然后实现myFunction方法之后,就能变易通过了
在这里插入图片描述
OC语言只有声明,没有实现也是可以的
在这里插入图片描述
但是运行之后就会崩掉,因为找不到该方法的实现
在这里插入图片描述

二:runtime提供的Api

1.给类添加一个新的方法

动态添加方法(1)–源码用到这个方法

参数说明:
BOOL: 返回值,yes-------方法添加成功 no--------方法添加失败
Class cls: 将要给添加方法的类,传的类型 [类名 class]
SEL name: 将要添加的方法名,传的类型 @selector(方法名)
IMP imp:实现这个方法的函数 ,传的类型 1,C语言写法:(IMP)方法名 2,OC的写法:class_getMethodImplementation(self,@selector(方法名:))

class_addMethod(<#Class  _Nullable __unsafe_unretained cls#>, <#SEL  _Nonnull name#>, <#IMP  _Nonnull imp#>, <#const char * _Nullable types#>)
  • 1

注意:const char *types:表示我们要添加的方法的返回值和参数

“v@

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/428381
推荐阅读
相关标签