iOS消息转发机制

作者: 鄙人哈哈哈哈5871 | 来源:发表于2016-08-14 20:53 被阅读25次

oc调用方法流程

1.先去自己cache中查找,再去类的方法列表中查找

2.再去父类的cache中和方法列表中

//动态方法解析

3.runtime会调用resolveInstanceMethod方法和resolveCalssMethod方法给我们一次添加方法的实现的机会,在这里这调用class_addMethod方法添加方法的实现

class_addMethod([self class], sel, (IMP)aTestMethod, "v@:");

第一个参数是往哪个类里面添加方法,第二个是调用的方法选择器,第三个是方法的实现,即函数指针,指向要添加的方法的实现,第四个是返回值和参数类型Type Encoding

如果添加成功就返回YES否则返回NO

//重定向

4.在消息转发机制执行前runtime会允许我们替换方法的接受者即Target

通过forwrdingTargetForSelector:(SEL)aSelector方法

如果方法返回的是nil或者self则进入消息转发机制否则对返回的对象发送消息

5.当触发消息转发机制forwardInvocation:方法调用这里的NSInvocation里面包含消息的名字、参数、调用者、返回值等信息

在这里可以调用下面的函数更改消息的调用者

[anInvocation invokeWithTarget:someOthertarget]

[anInvocation selector] //这个获取方法选择器

anInvocation参数的由来—在调用forwardInvocation:方法之前runtime会调用methodSignatureForSelector:获取到返回的方法签名生成NSInvocation对象所以重写forwardInvocation:之前也要重写methodSignatureForSelector:方法否则会抛出异常

NSObject方法中的forwardInvocation:方法只是实现了doesNotRecognizeSelector:方法我们可以实现自己的forwardInvocation:将消息转发给其他对象

forwardInvocation:这个方法是不能识别的消息的分发中心在这里可以将不能识别的消息转发给别的对象或者将消息翻译成另外的消息或者吃掉因此没有响应也不会报错

forwardInvocation:这个方法只有在消息的接收对象无法响应的时候才会被调用,否则这个方法不会调用

[self class] , object_getClass(self),object_getClass([self class]),

1.self是实例对象时,[self class]与object_getClass(self)等价,应为前者会调用后者,object_getClass([self class]),返回的是元类

2.self是类对象的时候,[self class],返回的就是本身self ,object_getClass(self)和object_getClass([self class]),是等价的

+(id)Class

{

return self;

}

-(id)class {

return object_getClass(self);

}

相关文章

  • runtime系列文章总结

    《iOS Runtime详解(消息机制,类元对象,缓存机制,消息转发)》《消息转发机制与Aspects源码解析》《...

  • iOS理解Objective-C中消息转发机制附Demo

    iOS理解Objective-C中消息转发机制附Demo iOS理解Objective-C中消息转发机制附Demo

  • iOS面试-基础

    [toc] Runloop AutoReleasePool 多线程 响应者链 消息响应机制 消息转发机制 iOS内...

  • iOS 消息转发机制

    今天大概学习了下iOS的消息转发机制,还是挺有收获,在此做下笔记,以便后面温习。 1.iOS的消息转发机制原理如下...

  • iOS面试题总结(二)

    iOS面试题(二) 消息发送和转发机制,SEL和IMP 消息发送转载自黄龙辉消息发送和消息转发机制 在Object...

  • Runtime

    相关简单介绍 消息机制消息传递机制消息转发机制-动态添加方法消息转发机制-快速转发消息转发机制-慢速转发消息转发机...

  • iOS - 消息转发机制

    我们知道,OC是动态语言,所有的方法都会以消息的形式传递给对象,对象会根据方法的类型来进行实例方法或者类方法的选择...

  • 【iOS】消息转发机制

    1、动态方法解析 对象在收到无法处理的消息时,会调用下面的方法,前者是调用类方法时会调用,后者是调用对象方法时会调...

  • iOS消息转发机制

    OC消息转发 oc中的调用对象或者类不存在的方法,会执行一遍消息转发流程.消息转发主要包括4步 首先调用+ (BO...

  • iOS 消息转发机制

    iOS开发过程中我们经常会碰到这样的报错:unrecognized selector sent to instan...

网友评论

    本文标题:iOS消息转发机制

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