runtime

Posted 时空矩人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了runtime相关的知识,希望对你有一定的参考价值。

1. runtime 就是运行时,  运行时就说动态调用

2. OC就是运行时机制, 也就是在运行的时候的一些机制, 其中最主要的是消息机制

3. 对应C语言, 函数的调用在编译的时候就决定调用哪个函数, 对于OC, 函数的调用属于动态调用过程, 在编译的时候不能真正决定调用哪个函数, 只有在正在运行的时候才会根据函数的名称找到对于的函数来调用

4. 编译阶段, OC可以调用任意函数, 即使某个函数只有声明没有实现, 但是C中就会报错

 

什么是消息机制?

OC 方法的调用就说发送消息 

 

//注: Xcode6 开始苹果就不推荐使用runtime了, 把很多函数的参数注释了, 这样是为了让用户更加依赖自己, Xcode7 以后有很多私有的成员变量都被屏蔽了

 

runtime使用场景

1. 如果想调用一个没有暴露出来的方法(没有在.h文件中声明的方法), 或者系统的方法

2. 写自己框架

 

runtime 的作用 

  • 发送消息

    1. 导入头文件

      #import <objc/message.h> 或者<objc/runtime.h>

    2. Xcode编译设置

      工程 -->  TARGETS -->  build Settings -->  搜索 msg -->  将严格检查OC消息机制 的值设置为NO

    3.

       Person *p = [Person alloc];

     => Person *p = objc_msgSend([Person class] @selector(alloc));

 

       p = [p init];

     => objc_msgSend(@selector(init));

 

       [p eat];

       objc_msgSend(p, @selector(eat));

    4. 方法调用的流程: (方法调用的本质是发送消息)

      1. 寻找方法, (对象方法保存在类里,每个类里都有一个方法列表), 根据isa指针去找到对应的类

      2. 根据方法编号去方法列表里找到对应的方法, @selector(eat)返回的就是方法编号

      3. 调用方法即可

  • 交换方法

说明

  • 动态添加方法

说明

  • 给分类添加属性

说明

  • 字典转模型

说明

以上是关于runtime的主要内容,如果未能解决你的问题,请参考以下文章

iOS-『Runtime』详解基础知识

iOS开发runtime学习:一:runtime简介与runtime的消息机制

NSObject头文件解析 / 消息机制 / Runtime解读

RunTime(消息机制) + RunTime(消息转发)

Runtime 运行时之一:消息传递

runtime总结二之消息机制(包括消息转发,消息交换的黑魔法)