作家
登录

iOS消息转发机制Demo解析

作者: 来源: 2017-12-18 12:04:07 阅读 我要评论

解析

此时有两个同样的办法, 我们从新在Person类中

声明函数

来实现办法

此时运行测试, 动态测试输出” 消息转发机制Demo[45875:4255869] sel = run “, 消息转发重定向输出” 消息转发机制Demo[45875:4255869] —Mbxbrunok— “, 同样也可以找见办法run

当我们进行处理

  1. - (id)forwardingTargetForSelector:(SEL)aSelector{ 
  2. NSLog(@"aSelector = %@",NSStringFromSelector(aSelector)); 
  3. return [[Mbxb alloc]init]; 

那么此时运行成功输出, “ —Mbxbrunok— “

生成办法签名转发消息

基本步调

此时我们在Person类中, 生成办法签名

拿到签名

  1. - (void)forwardInvocation:(NSInvocation *)anInvocation OBJC_SWIFT_UNAVAILABLE(""){ 
  2. NSLog(@"---%@---",anInvocation); 
  3. return [super forwardInvocation:anInvocation]; 

此时我们的po的签名输出为” return value: {v} void target: {@} 0x600000016ba0 selector: {:} run “

拿到消息转发签名

  1. - (void)forwardInvocation:(NSInvocation *)anInvocation OBJC_SWIFT_UNAVAILABLE(""){ 
  2. NSLog(@"---%@---",anInvocation); 
  3. //取到消息 
  4. SEL seletor = [anInvocation selector]; 
  5. //转发 
  6. Mbxb *bxb = [[Mbxb alloc]init]; 
  7. if([bxb respondsToSelector:seletor]){ 
  8. //调用对象,进行缀发 
  9. [anInvocation invokeWithTarget:bxb]; 
  10. }else
  11. return [super forwardInvocation:anInvocation]; 

小细节: 抛出异常

  1. - (id)forwardingTargetForSelector:(SEL)aSelector{ 
  2. NSLog(@"aSelector = %@",NSStringFromSelector(aSelector)); 
  3. return [super forwardingTargetForSelector:aSelector]; 

假如说我们没有这个办法, 同样是碰到会崩溃的问题

我们这里来进行一个异常处理

  1. - (void)doesNotRecognizeSelector:(SEL)aSelector{ 
  2. NSString *selStr = NSStringFromSelector(aSelector); 
  3. NSLog(@"%@不存在",selStr); 

解析模仿

  1. - (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector OBJC_SWIFT_UNAVAILABLE(""){ 
  2. //转化字符 
  3. NSString *sel = NSStringFromSelector(aSelector); 
  4. //断定, 手动生成签名 
  5. if([sel isEqualToString:@"run"]){ 
  6. return [NSMethodSignature signatureWithObjCTypes:"v@:"]; 
  7. }else
  8. return [super methodSignatureForSelector:aSelector]; 

我们可以在这个异常处理一一些处理, 比如说弹框

总结


  推荐阅读

  灾难恢复计划如何使企业免受业务中断?

开辟者大年夜赛路演 | 12月16日,技巧立异,北京不见不散 您企业的营业经由过程异步备份便可以或许获得支撑,抑>>>详细阅读


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

地址:http://www.17bianji.com/lsqh/39877.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)