美文网首页
第四章、runtime相关

第四章、runtime相关

作者: Evans_Xiao | 来源:发表于2019-08-09 21:29 被阅读0次

    一、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_开头

    相关文章

      网友评论

          本文标题:第四章、runtime相关

          本文链接:https://www.haomeiwen.com/subject/iqpkjctx.html