第四章、runtime相关

2019-08-09  本文已影响0人  Evans_Xiao

一、objc中向一个对象发送消息[obj foo]和objc_msgSend()函数之间有什么关系?

objc_msgSend()[obj foo]的具体实现。
在runtime中,objc_msgSend()是一个c函数,[obj foo]会被翻译成这样的形式objc_msgSend(obj, foo)

OC到C的转换过程分析:[obj foo];=>objc_msgSend(obj, @selector(foo));

二、runtime简介

runtime简称运行时。OC就是运行时机制,其中最主要的是消息机制。对于C语言,函数的调用在编译的时候会决定调用哪个函数。对于OC的函数,属于动态调用过程,在编译的时候并不能决定真正调用哪个函数,只有在真正运行的时候才会根据函数的名称找到对应的函数来调用。

三、说说什么是runtime

1、OC是一个全动态语言,OC的一切都是基于runtime实现的。平时编写的OC代码,在程序运行过程中,其实最终都是转成了runtime的C语言代码,runtime算是OC的幕后工作者。
2、runtime是一套比较底层的纯C语言API,属于1个C语言库,包含了很多底层的C语言API。
3、runtimeAPI的实现是用C++开发的(源码中的实现文件都是mm),是一套苹果开源的框架。

四、runtime应用场景

1、动态交换两个方法的实现
2、动态添加属性
3、实现字典转模型的自动转换
4、动态添加方法
5、拦截并替换方法
6、实现NSCoding的自动归档和解档

五、runtime函数的定义规则

对对象进行操作的方法一般以object_开头
对类进行操作的方法一般以class_开头
对类或对象的方法进行操作的方法一般以method_开头
对成员变量进行操作的方法一般以ivar_开头
对属性进行操作的方法一般以property_开头开头
对协议进行操作的方法一般以protocol_开头

上一篇下一篇

猜你喜欢

热点阅读