zoukankan      html  css  js  c++  java
  • Objective-C 消息发送与转发机制原理(摘)

    八面玲珑的 objc_msgSend

    此函数是消息发送必经之路,但只要一提 objc_msgSend,都会说它的伪代码如下或类似的逻辑,反正就是获取 IMP 并调用:



    id objc_msgSend(id self, SEL _cmd, ...) {
    Class class = object_getClass(self);
    IMP imp = class_getMethodImplementation(class, _cmd);
    return imp ? imp(self, _cmd, ...) : 0;
    }

    回顾 objc_msgSend 伪代码

    回过头来会发现 objc_msgSend 的伪代码描述得很传神啊,因为class_getMethodImplementation 的实现如下:



    IMP class_getMethodImplementation(Class cls, SEL sel)
    {
    IMP imp;
    if (!cls || !sel) return nil;
    imp = lookUpImpOrNil(cls, sel, nil, YES/*initialize*/, YES/*cache*/, YES/*resolver*/);
    // Translate forwarding function to C-callable external version
    if (!imp) {
    return _objc_msgForward;
    }
    return imp;
    }

    消息发送与转发路径流程图消息发送与转发路径流程图
     
    http://yulingtianxia.com/blog/2016/06/15/Objective-C-Message-Sending-and-Forwarding/
  • 相关阅读:
    OCP-1Z0-051-V9.02-162题
    OCP-1Z0-051-V9.02-161题
    OCP-1Z0-051-V9.02-160题
    Matlab中矩阵的分解
    OCP-1Z0-051-V9.02-158题
    OCP-1Z0-051-V9.02-157题
    Matlab中特殊的矩阵函数
    求Matlab中矩阵的秩和迹
    Matlab中的条件数
    在android里使用boost c++
  • 原文地址:https://www.cnblogs.com/feng9exe/p/10945712.html
Copyright © 2011-2022 走看看