首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >热修复=Runtime+Javascriptcore

热修复=Runtime+Javascriptcore

作者头像
Helloted
发布2022-06-07 13:53:43
发布2022-06-07 13:53:43
45200
代码可运行
举报
文章被收录于专栏:HellotedHelloted
运行总次数:0
代码可运行

一、运行时

热修复的基本原理就是Runtime运行时的方法替换,主要是下列几个方法

class_replaceMethod:方法替换

method_exchangeImplementations:IMP交换

实例,当我们要对某个类的old_method方法以new_method方法替换掉,则新建一个Category,在其load类方法(Load方法每次APP加载都会调用)中实现以下:

代码语言:javascript
代码运行次数:0
运行
复制
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        Class class = [self class];
        
        SEL originalSelector = @selector(old_method);
        SEL swizzledSelector = @selector(new_method);
        
        Method originalMethod = class_getInstanceMethod(class, originalSelector);
        Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector);
        
        
        BOOL didAddMethod =
        class_addMethod(class,
                        originalSelector,
                        method_getImplementation(swizzledMethod),
                        method_getTypeEncoding(swizzledMethod));
        
        if (didAddMethod) {
            class_replaceMethod(class,
                                swizzledSelector,
                                method_getImplementation(originalMethod),
                                method_getTypeEncoding(originalMethod));
        } else {
            method_exchangeImplementations(originalMethod, swizzledMethod);
        }
    });

二、Javascriptcore

Javascriptcore是一个iOS原生框架,用于javascript与Objecive C语言进行相互调用,而我们热修改需要用到的就是javascript可以调用OC方法

三、热修复

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、运行时
  • 二、Javascriptcore
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档