zoukankan      html  css  js  c++  java
  • OC的消息机制简单介绍

    在OC的消息机制中主要分为三个阶段,分别为:

    1、消息发送阶段:从类以及父类的方法缓存列表和方法列表查找方法。

    2、动态解析阶段:在消息发送阶段没有找到方法,则会进入这个阶段,负责动态添加方法实现。

    3、如果没有实现动态解析方法,则会进行消息转发阶段,将消息转发给可以处理消息的接受者来处理。

    如果以上都没有实现就会报出找不到方法的崩溃。

    一、消息转发

    首先判断这个对象是不是nil,如果是就相当于直接break,如果有,则会通过对象的isa指针找到这个类,在缓存的方法列表中查找,如果有则执行,没有则去方法列表中查找,如果没有通过superclass找到父类,在父类的缓存方法列表和方法列表中查找。

    二、上述没有找到就会进入动态方法解析

    根据是对象方法还是类方法会调用不同的方法:

    类方法:resolveClassMethod

    实例方法:resolveInstanceMethod

    在方法中通过class_addMethod,动态添加方法的实现。

    三、消息转发

    通过签名,runtime生成了一个新的对象NSInvocation,发送给了forwardInvocation方法,在这个方法中让另外一个对象执行最开始的方法。如果forwardingTargetForSelector返回值不为空,就会让这个转发的目标处理消息。如果为nil,则会methodSignatureForSelector返回一个方法签名会调用forwardInvocation方法,根据NSInvocation修改方法的对象(方法的调用者,方法名,以及方法的参数)即可。如果methodSignatureForSelector返回为nil,则会doseNotRecognizeSelector方法内部。

    最后都没有实现就会崩溃,因为找不到方法的实现。

  • 相关阅读:
    C#语言和SQL Server数据库技术_My Bank银行系统
    C#语言和SQL Server数据库技术_深入C#的String类
    C#语言和SQL Server数据库技术_C#语法快速热身
    HTML_利用CSS3制作网页动画
    HTML_定位网页元素
    HTML_浮动
    HTML_盒子模型
    HTML_css3美化网页元素
    iview中select搜索
    第六章、Vue项目预热
  • 原文地址:https://www.cnblogs.com/Acee/p/12814587.html
Copyright © 2011-2022 走看看