JSPatch
JSPatch是一个iOS动态更新框架,只需要在项目中引入极小引擎,就可以使用javascript调用任何Objective-c原生接口,获得脚本语言的优势:为项目动态加载模块,或替换项目原生代码修复bug。
基础原理
JSPatch能够通过JS调用和改写OC方法最根本的原因是Objective-C是动态语言,OC上所有方法的调用/类的生成都通过Objective-C Runtime在运行时进行,我们可以通过类名/方法名反射得道相应的类和方法:
Class class = NSClassFromString("UIViewController");
id viewController = [[class alloc]init];
SEL selector = NSSelectorFromString("viewDidLoad");
也可以替换某个类的方法为新的实现:
static void newViewDidLoad(id self,SEL sel){}
class_replaceMethod(class,selector,newViewDidLoad,@"");
还可以新注册一个类,为类添加方法:
Class cls = objc_allocateClassPair(superCls,"JPObject",0);
objc_registerClassPair(cls);
class_addMethod(cos,selector,implement,typedesc);
总结
JSPatch的基本原理:JS传递字符串给OC,OC通过Runtime接口调用和替换OC方法。这是最基础原理
网友评论