OC源码分析-Runtime源码分析(四)

一 : 对象方法消息转发

当前两个阶段 都搞不定的时候调用消息转发机制.


如果forwardingTargetForSelector返回的是nill,或者没写,则进入methodSignatureForSelector方法,如果继续不处理返回nill,则进入doesNotRecgnizeSelector方法,报异常,

不为nill则调用forwardinvocation方法进行处理

二 : forwardInvocation解析

在这个方法中可以尽情处理
我们可以在这个方法中只打印

带一个age参数

获取一个参数

获取调用返回值

方法签名的另一种写法

二 : 类方法消息转发

或者

+号方法的forwardingTargetForSelector:也可以返回实例对象,因为本质相当于 ,执行消息发送 obj_msgSend([[MJCat alloc]init],@selector(test)),相当于调用了实例对象-号方法

三 : dynamic

提醒编译器不要自动生成setter和getter的实现、不要自动生成成员变量

动态添加set/get方法


四 : super 本质

super本质以及底层实现,super调用,底层会转换成objc_msgSendSuper2函数的调用,接受两个参数一个是 结构体参数 ,还有一个是方法名.

结构体表现

案例分析

class 与 superclass方法的底层实现

[super class] 底层调用 obj_megSendSuper. 其消息接受者是self,class在NSObject中,在其class方法中的self是放调用者,也就是 obj_megSendSuper的消息接受者.
[super superclass]

四 : 方法转发用法

没有实现test与other方法

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

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,775评论 0 9
  • 继上Runtime梳理(四) 通过前面的学习,我们了解到Objective-C的动态特性:Objective-C不...
    小名一峰阅读 770评论 0 3
  • 参考链接: http://www.cnblogs.com/ioshe/p/5489086.html 简介 Runt...
    乐乐的简书阅读 2,158评论 0 9
  • runtime 和 runloop 作为一个程序员进阶是必须的,也是非常重要的, 在面试过程中是经常会被问到的, ...
    made_China阅读 1,230评论 0 7
  • 在上一篇文章中介绍了CORS跨源资源共享,在本节中介绍JSONP跨源技术。 JSONP也可以用来实现跨域资源请求,...
    滚石_c2a6阅读 288评论 0 0