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方法内部。

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

  • 相关阅读:
    MTK手机默认音量大小调节工具
    问题:MTK手机软件开发平台中字串资源添加进去了,菜单也能用,但是菜单上的字符串显示不出来。
    GNU ARM汇编快速入门
    想成为嵌入式程序员应知道的0x10个基本问题
    学习MTK需要的环境,平台,资料
    BSP 概念解析
    作为程序员的苦恼
    浅谈程序员的职业规划
    入行三年回顾
    程序员谈“应用推广”
  • 原文地址:https://www.cnblogs.com/Acee/p/12814587.html
Copyright © 2011-2022 走看看