美文网首页
iOS 2019年2月学习记录

iOS 2019年2月学习记录

作者: quantiza | 来源:发表于2019-03-12 11:34 被阅读0次
  1. 消息发送与转发
    1.1 简介
    OC的消息机制是通过runtime实现的,消息发送是通过selector快速查找IMP的过程;消息转发是在查找IMP失败是进行重新进行方法解析或转发的过程。如果查找IMP失败后不做转发处理或转发失败,程序会抛出异常unrecognized selector
    1.2 消息发送机制(Runtime快速查找IMP的过程)
    1)通过实例变量的isa指针确定class
    2)如果是实例方法,在class的methodLists里查找IMP,查找不到就到superclass里查找;如果是类方法,在metaclass里查找IMP,查找不到再到metaclass指向的的superclass里查找
    3)为了提高查找效率在第二步查找之前其实是在class的cache里先查找,查不到后再执行第(2)步
    4)一旦找到跳转到IMP指针指向的方法实现,执行函数。否则,开始转发。
    1.3 Method, SEL, IMP, selector
    SEL, IMP是OC关键字,Method的结构体为如下,通过@selector(name)把name转出SEL编号,让后在methodLists里找到对应的Method,在Method里找到IMP,通过IMP调用方法实现。消息发送中的message指的应该是@selector
    image.png
    1.4 转发过程
    上面消息发送失败后会进行消息转发,包括3步
    1)方法解析(Method resolution)
    + (BOOL)resolveInstanceMethod:(SEL)sel
    + (BOOL)resolveClassMethod:(SEL)sel
    2)快速转发(Fast forwarding)
    - (id)forwardingTargetForSelector:(SEL)aSelector
    3)常规转发(Normal forwarding)
    - (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
    - (void)forwardInvocation:(NSInvocation *)anInvocation
    1.5 Normal forwarding和Fast forwarding的区别
    1)发送的消息不同
    2)转发给的对象数量不同
    1.6 应用
    1)崩溃预防处理,把不可处理的消息转发统一处理了
    2)多继承,

相关文章

  • 开博咯

    记录下 2015年11月30日,开始用这个记录iOS学习之路

  • IOS 学习记录

    1.UIView作为CALayer的代理,处理在事件响应等方面的事务,而layer层负责显示的事务。所以在利用CA...

  • IOS学习记录

    1.navigationcontroller标题设置self.navigationItem.title = @""...

  • iOS 学习资料

    记录iOS开发中的一些学习资料, 持续更新 OpenGL学习资料

  • OpenGL ES on iOS --- 光照进阶

    OpenGL ES on iOS --- 光照进阶 简述 本文记录我记录我学习 坐标体系和矩阵转换的过程,加深学习...

  • iOS 学习心得记录之:拿到了ViewController就等于

    iOS 开发心得记录之:拿到了ViewController就等于拿到了view 在学习开发 iOS 的时候,我有时...

  • 技术之路

    开篇,此处记录我学习iOS开发技术的历程,想法,问题及方案。

  • iOS APP内存优化记录

    iOS APP内存优化记录iOS APP内存优化记录

  • iOS GCD学习记录

    1,对于创建全局使用的串行或者并行队列,都应该用strong修饰,例如 @property (nonatomic,...

  • IOS swift 学习记录

    1: swift 富文本使用 (1) location : 开始的下标 (2)length : 长度 let ...

网友评论

      本文标题:iOS 2019年2月学习记录

      本文链接:https://www.haomeiwen.com/subject/tkolyqtx.html