not respond selector 的处理

在类别中添加not respond selector 的处理

注意点:

  1. 交换方法在 + (void)load 中添加 ,实例方法class_getInstanceMethod,类方法class_getClassMethod,交换用method_exchangeImplementations,也可以用 method_setImplementation

2.在类别中添加重写load 会调用所有类别中的load方法

3.not respond时会先调用 +resolveInstanceMethod: ,可以在这里class_addMethod 处理

4.若+resolveInstanceMethod: 返回NO,则会继续调用forwardingTargetForSelector,此时可以返回一个respond selobj作为消息对象,即 更换消息接收者;

5.1 若 forwardingTargetForSelector 返回nil,则会继续调用-methodSignatureForSelector:

5.2 这时可以返回了一个函数签名,然后Runtime就会创建一个NSInvocation对象并发送-forwardInvocation:消息给目标对象

5.3 此时我们可以在-forwardInvocation:中 调用 NSInvocation invokeWithTarget:(可响应的对象)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文详细整理了 Cocoa 的 Runtime 系统的知识,它使得 Objective-C 如虎添翼,具备了灵活的...
    lylaut阅读 840评论 0 4
  • 本文转载自:http://yulingtianxia.com/blog/2014/11/05/objective-...
    ant_flex阅读 818评论 0 1
  • 我们常常会听说 Objective-C 是一门动态语言,那么这个「动态」表现在哪呢?我想最主要的表现就是 Obje...
    Ethan_Struggle阅读 2,242评论 0 7
  • 前言: unrecognized selector类型的crash是因为一个对象调用了一个不属于它的方法导致的。要...
    盗梦49阅读 965评论 0 4
  • 文中的实验代码我放在了这个项目中。 以下内容是我通过整理[这篇博客] (http://yulingtianxia....
    茗涙阅读 964评论 0 6