专栏首页正则iOS的动态创建实例方法和实现消息转发
原创

iOS的动态创建实例方法和实现消息转发

做了几年的iOS开发一直没有写博客,一直怕写的不好误导大家,今儿第一次在腾讯云写点干货

实现动态添加方法

(1)为了编译通过,我们需要通过performSelector开头的方法调用 TestTransmit这个类的方法show:)的方法

(2)如果TestTransmit类没有实现show:方法那么将调用TestTransmit的类方法+(void)resolveInstanceMethod:方法,覆盖这个方法

判断一下要调用的方法时候和我在这个类里想调用的方法时候一致,if(一致)用class_addMethod这个c语言函数创建一个方法,这个方法的第一个参数就是你要添加方法的那个类的class类对象,第二个参数就是传递过来的sel,第三个是一个函数的入口名称,这个函数实际上是内部内容就是添加方法的内部内容,第四个参数是上一个参数--函数的参数要数,第一个v代表这个函数的返回值为void,如果返回对象类型就是@,后面的@:@分别代表后续的三个参数,其中Sel类型的用:表示,具体请参考苹果开发文档。其实除了_cmd大家可能不熟悉之外,其他的基本上可以参考NSLog这个函数了,NSString就是用@表示。

别忘了调用super方法,至于调用class后一行需要返回一个bool值,据验证,无论返回NO还是YES,dynamic_show函数都会被调用。

实现消息转发

接着上面的代码写,如果我把上面的class_addMethod函数调用这一行注释掉程序立马crash,如果想程序不蹦,那么就需要接着询问消息改怎么处理,很显然当前类是没有没有办法接着寻找这个方法了,那么我们就需要转给其他类来处理,就需要实现methodSignatureForSelector:这个方法了这个类告诉我们时候有处理这个消息的类,如果返回不为空,那么就来到这个方法forwardInvocation:这个方法怎么处理我就不多说,直接上图

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • iOS开发·runtime原理与实践: 消息转发篇(Message Forwarding) (消息机制,方法未实现+API不兼容奔溃,模拟多继承)

    在我们开始使用消息机制之前,我们可以约定我们的术语。例如,很多人不清楚“方法”与“消息”是什么,但这对于理解消息传递系统如何在低级别工作至关重要。

    陈满iOS
  • iOS 端实现1对1音视频实时通话

    之前,我已经写过 Android 端实现1对1音视频实时通话 的文章。在那篇文章中,我向大家介绍了在 Android 端是如何使用 WebRTC 进行音视频通话...

    音视频_李超
  • RunTime 之常规操作

    有关Runtime的知识总结,我本来想集中写成一篇文章的,但是最后发现实在是太长,而且不利于阅读,最后分成了如下几篇:

    進无尽
  • hbuilder 开发5+ APP采坑记录

    开发一款APP产品需要在安卓和苹果2大平台发布,同时开发团队也需要有安卓和IOS。 HTML5 Plus移动App,简称5+App,是一种基于HTML、JS、C...

    猿天地
  • Runtime消息转发机制

    Class_Nonnull isa OBJC_ISA_AVAILABILITY;

    ZY_FlyWay
  • 有赞移动消息卡片动态化方案实践

    消息业务作为有赞移动的共享业务,在微商城、零售、美业等 B 端 App 中承担着多客服的角色,多客服是有赞为商家提供的连接商家和买家的即时消息客服工具;在精选、...

    有赞coder
  • JSB 原理与实践

    我们开发的 h5 页面运行在端上的 WebView 容器之中,很多业务场景下 h5 需要依赖端上提供的信息/能力,这时我们需要一个可以连接原生运行环境和 JS ...

    wade
  • JSB 原理与实践

    我们开发的 h5 页面运行在端上的 WebView 容器之中,很多业务场景下 h5 需要依赖端上提供的信息/能力,这时我们需要一个可以连接原生运行环境和 JS ...

    童欧巴
  • JSB 原理与实践

    我们开发的 h5 页面运行在端上的 WebView 容器之中,很多业务场景下 h5 需要依赖端上提供的信息/能力,这时我们需要一个可以连接原生运行环境和 JS ...

    用户6835371
  • 前端技术:一文带你掌握Flutter插件开发新姿势

    导语 | 随着Flutter生态的快速发展,越来越多的Flutter插件涌现出来,那么如何开发一个Flutter插件呢?本文以具体的native_image_v...

    腾小云
  • Flutter:platform channel

    Flutter使用了一个灵活的系统,允许您调用特定平台的API,无论在Android上的Java或Kotlin代码中,还是iOS上的ObjectiveC或Swi...

    Dwyane
  • iOS学习——iOS 整体框架及类继承框架图

      整理自:IOS 整体框架类图值得收藏  一 整体框架 在iOS开发过程中,对iOS整体框架的了解和学习是必不可少的一个环节,今天我们就好好来了解一下iOS...

    mukekeheart
  • iOS 开发:『Crash 防护系统』(一)Unrecognized Selector

    APP 的崩溃问题,一直以来都是开发过程中重中之重的问题。日常开发阶段的崩溃,发现后还能够立即处理。但是一旦发布上架的版本出现问题,就需要紧急加班修复 BUG,...

    程序员充电站
  • 消息推送开发指南(对即时性和送达率有要求的场景、极光推送设置心跳交互时间)【修订版】

    iOS 10 新增的 Notification Service Extension 功能,用 mutable-content 字段来控制。

    公众号iOS逆向
  • Flutter通过BasicMessageChannel与Android iOS 的双向通信

    题记:不到最后时刻,千万别轻言放弃,无论结局成功与否,只要你拼博过,尽力过,一切问心无愧。

    早起的年轻人
  • iOS基础开发实践:iMessage Extension浅析

    天天P图攻城狮
  • 求职笔记-iOS篇

    前言 今年年初求职时,整理、回顾了学习iOS开发以来收获的知识,此篇为当时的笔记。 插一段我对面试的看法。 公司要在短短的几个小时内要详细了解求职者,并且求...

    落影
  • 唐巧的iOS技术博客选摘

    王大锤
  • iOS中Cocoa框架·Runtime及isa指针知识·填坑

    是什么因素使一个程序成为Cocoa程序呢?不是编程语言,因为在Cocoa开发中你可以使用各种语言;也不是开发工具,你可以在命令行上就可以创建Cocoa程序。Co...

    陈满iOS

扫码关注云+社区

领取腾讯云代金券