zoukankan      html  css  js  c++  java
  • Runtime相关整理

    一.Runtime是用C和汇编写的

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

    二.Runtime常用头文件

      #import<objc/runtime.h>

      #import<objc/message.h>

    三.Runtime常用函数

             class_copyIvarList:获得某个类内部的素有成员变量

               class_copyMethodList:获得某个类内部的所有方法

               class_getInstanceMethod:获得某个具体的实例方法

               class_getClassMethod:获得某个具体的类方法

               class_getMethodImplementation:获取方法实现

               method_exchangeImplementations:交换两个方法的实现

               objc_msgSend:给对象发送消息

               class_addMethod:添加方法

               objc_getAssociatedObject:根据关联的key,获取关联的值

               objc_setAssociatedObject:设置关联属性

    四.Runtime使用场景

               发送消息

               交换方法

               动态生成属性,方法

               通过block回调,直接调用action

               归档,解档

               字典转模型

    五.Runtime各种使用场景的具体实现

           1.发送消息

       

    注意点:

      

      

          2.交换方法

        因为不能直接在分类中重写系统方法,例如imageNamed,这样会把系统功能覆盖掉,分类中不能调用super,所以需要用到交换方法来代替重写。

      

         3.动态生成属性,方法

        如果一个类的方法非常多,加载类到内存的时候也比较资源,需要给每个方法生成映射表,动态生成方法则解决了这个问题。

       

      动态添加属性

       

          4.通过block回调,直接调用action

       

      //通过block回调,直接调用action

       

       

       

          5.归档,解档

      

      

      

          6.字典转模型

      KVC:遍历字典中的所有key,去模型中查找有没有对应的属性名

      Runtime:遍历模型中的所有属性名,去字典中查找

      

      

  • 相关阅读:
    HDU 1018.Big Number-Stirling(斯特林)公式 取N阶乘近似值
    牛客网 Wannafly挑战赛9 C.列一列-sscanf()函数
    牛客网 Wannafly挑战赛9 A.找一找-数据处理
    Codeforces 919 C. Seat Arrangements
    Codeforces Round #374 (Div. 2) D. Maxim and Array 线段树+贪心
    Codeforces Round #283 (Div. 2) A ,B ,C 暴力,暴力,暴力
    Codeforces Round #283 (Div. 2) E. Distributing Parts 贪心+set二分
    Codeforces Round #280 (Div. 2) E. Vanya and Field 数学
    Codeforces Round #280 (Div. 2) D. Vanya and Computer Game 数学
    Codeforces Round #280 (Div. 2) A , B , C
  • 原文地址:https://www.cnblogs.com/xinjydeshow/p/Runtime.html
Copyright © 2011-2022 走看看