JSPatch 是一个 iOS 动态更新框架,只需在项目中引入极小的引擎,就可以使用 JavaScript 调用任何 Objective-C 原生接口,获得脚本语言的优势:为项目动态添加模块,或替换项目原生代码动态修复 bug。
第一 资源列表
第二 JSPatch 可以实现的原理
- JSPatch 能做到通过 JS 调用和改写 OC 方法
最根本的原因
是 : Objective-C 是动态语言,OC 上所有方法的调用/类的生成都通过 Objective-C Runtime 在运行时进行,我们可以通过类名/方法名反射得到相应的类和方法 - **具体做法: **JS 传递字符串给 OC,OC 通过 Runtime 接口调用和替换 OC 方法。
//获取初始化到一个类并执行指定的方法
Class class = NSClassFromString("UIViewController");
id viewController = [[class alloc] init];
SEL selector = NSSelectorFromString("viewDidLoad");
[viewController performSelector:selector];
------------
static void newViewDidLoad(id slf, SEL sel) {}
//替换方法的函数
class_replaceMethod(class, selector, newViewDidLoad, @"");
------------
//注册类 添加方法
Class cls = objc_allocateClassPair(superCls, "JPObject", 0);
objc_registerClassPair(cls);
class_addMethod(cls, selector, implement, typedesc);
如果对于runtime没有概念的话可以参考--iOS Runtime学习与使用
第三 JSPatch + Runtime
以上图片来源于JSPatch 实际案例使用解析
继续补充
参考文章
更多精彩内容请关注“IT实战联盟”哦~~~