美文网首页
iOS开发之热更新热修复

iOS开发之热更新热修复

作者: IOS应用 | 来源:发表于2022-05-06 18:58 被阅读0次

OC 消息转发机制,当调用一个 NSObject 对象不存在的方法时,并不会马上抛出异常,而是会经过多层转发,层层调用对象的-resolveInstanceMethod:, -forwardingTargetForSelector:, -methodSignatureForSelector:, -forwardInvocation: 等方法,其中最后-forwardInvocation: 是会有一个 NSInvocation对象,这个NSInvocation对象保存了这个方法调用的所有信息,包括 Selector 名,参数和返回值类型,最重要的是有所有参数值,可以从这个NSInvocation 对象里拿到调用的所有参数值。我们可以想办法让每个需要被 JS 替换的方法调用最后都调到-forwardInvocation:,就可以解决无法拿到参数值的问题了。

也就是说热更新、热修复就是利用OC的消息机制消息发送,动态解析,消息转发。就是在消息转发阶段动态的添加了方法的实现,以达到热修复的目的。

JSPatch是一个开源项目(JSPatch),JSPatch 把 OC 手动翻译成 JS,在运行时通过 OC 的动态特性去调用和替换 OC 方法,实时修复 bug。修 bug 这个需求基本是满足了,虽然小绕了下道,但成本还是很低的,引擎本身也很小很轻量,接入对 APP 不会有任何负面影响,在关键时刻又可以帮大忙,成本低收益高,于是很容易推广开。JSPatch 满足了修 bug 的需求,但还是无法满足动态化的全部需求,最大的缺点在于需要手写 JS,虽然已经有转换器辅助,但还没做到100%准确,用来修 bug 还好,用来添加功能的话学习成本和开发效率还不够。

于是有了滴滴的 DynamicCocoa 这种方案,绕了一个更大的道,从编译阶段入手,通过 clang 把 OC 代码编译成自己定制的 JS 格式,再动态下发去执行,做到原生开发,动态运行,主打动态添加功能,当然顺便把修 bug 也给支持了。手机 QQ 内部也有一个类似的方案,不过更进一步,他们通过 clang 把 OC 代码编译成自己定制的字节码动态下发,然后开发一个虚拟机去执行(惊呆了),同样实现了原生开发,动态运行,都是 NB 得很的方案。只要底层处理做得足够好,也是个成本低收益高的方案,不过目前都还没开源,还没能看到实际效果和 NB 的源码,挺期待。

以下文章可以做一个学习参考:
GCD面试要点
block面试要点
Runtime面试要点
RunLoop面试要点
内存管理面试要点
MVC、MVVM面试要点
网络性能优化面试要点
网络编程面试要点
KVC&KVO面试要点
数据存储面试要点
混编技术面试要点
设计模式面试要点
UI面试要点

相关文章

  • iOS开发之热更新热修复

    OC 消息转发机制,当调用一个NSObject对象不存在的方法时,并不会马上抛出异常,而是会经过多层转发,层层调用...

  • JSPath热更新和热修复 个人小结

    热更新和热修复 个人小结 热修复和热更新 1 热更新和热修复:在线修复程序的 BUG 2 JSPach 的使用原理...

  • iOS热更新(热修复)_JSPatch

    JSPatch小结 例子: app上线了,遇到了重大bug,提交新版本要审核几天,为了避免用户流失,需要马上将bu...

  • 热更新,热修复

    鸿洋大神博客:http://blog.csdn.net/lmj623565791/article/list/1 (...

  • 热更新热修复

    热更新 热更新是一种各大手游等众多APP常用的更新方式。简单来说,就是在用户下载安装APP之后,打开App时遇到的...

  • iOS 现在的 “热修复/热更新”

    我先来抛一个?,为啥苹果大大会禁用JSPatch的“热更新”?以及iOS统计现阶段可以通过审核的“热更新”。这个砖...

  • Android热修复-AndFix简单使用

    热修复:产品出现小Bug,如果开发者修复Bug,重新发包,则成本较高、效率低,用户也需要重新下载更新;而热修复即可...

  • TTPatch使用

    作用 iOS热更新、热修复、热重载、动态创建类、新增方法、扩展新界面。 体验 下载的demo工程,cd到JS目录下...

  • iOS热更新/热修复JSPatch的使用

    一、目的: 随着APP迭代更新,项目越写越庞大,每个功能间的关联性越来越多。再加上测试人员人手不足等情况,不可避免...

  • iOS热更新/热修复JSPatch的使用

    一、目的: 随着APP迭代更新,项目越写越庞大,每个功能间的关联性越来越多。再加上测试人员人手不足等情况,不可避免...

网友评论

      本文标题:iOS开发之热更新热修复

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