美文网首页iOS Ant
Objective-C消息转发流程

Objective-C消息转发流程

作者: 陈小翰 | 来源:发表于2017-11-16 10:31 被阅读2次

抛出异常

当一个对象调用方法是,也就是传递消息的时候,在对象中找不到对应的方法。那么,如果我们在消息转发途中没有对这个消息进行拦截处理的话,这对象最终会调用NSObjectdoesNotRecognizeSelector:方法来抛出异常:

[xxx xxx]: unrecognized selector send to instance 0x87.. 

流程

第一层

对象在收到无法解读的消息后,首先将调用所属类的下列类方法

//根据调用的对象来指向到不同的方法中
+(BOOL)resolveInstanceMethod:(SEL)sel{
   //默认返回NO 
}
+(BOOL)resolveClassMethod:(SEL)sel{
   //默认返回NO
}

第二层

在第一层处理不了的情况下,还有第二次机会,就是更换消息接收对象(也就是更换调用的对象),注意,这个是对象方法:

//返回的对象就是备援接受者,也就是备胎,默认返回为nil
-(id)forwardingTargetForSelector:(SEL)aSelector{
    
}

第三层

到这里还是处理不了,就只能创建NSInvocation,将与未处理的消息有关的细节封装在里面(包括target,sel,paramsd等),调用:

-(void)forwardInvocation:(NSInvocation *)anInvocation{
   [super ...] 
}

一直往上调用,直至调用到NSObject的该方法,而NSObject的该方法中,调用了doesNotRecognizeSelector:来抛出异常

流程图.png

相关文章

  • Objective-C消息转发流程

    抛出异常 当一个对象调用方法是,也就是传递消息的时候,在对象中找不到对应的方法。那么,如果我们在消息转发途中没有对...

  • 12.9 消息转发机制

    参考内容: Objective-C 消息发送与转发机制原理 首先来看下消息转发的整体流程图 当一个对象的方法被调用...

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

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

  • Runtime主要用处

    深入理解Objective-C Runtime机制 一:消息转发流程和机制 1、实例方法:本类的缓存方法列表->本...

  • 消息转发流程

    一.消息转发流程 当向Objective-C对象发送一个消息,但runtime在当前类及父类中找不到此select...

  • Objective-C 运行时(Runtime)解析

    Objective-C基于C语言加入了面向对象特性和消息转发,Objective-C 的消息转发需要运行时系统来动...

  • 消息转发流程

    实例方法的流程 对象实例收到消息(SEL+参数) 根据存储在对象实例中的ISA到类对象,类对象依次查找Class ...

  • 消息转发流程

    消息转发机制 消息的查找流程分为:快速查找和慢速查找消息转发机制也分为:快速和慢速先来一个转发流程图 之前我们的消...

  • 消息转发流程

    1. 动态方法解析 voidsendMessage(idself,SEL_cmd,NSString*msg){ ...

  • 消息转发流程

    动态方法解析 备用接收者 完整消息转发

网友评论

    本文标题:Objective-C消息转发流程

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