经常性的在原生开发App过程中会遇到因为需求的原因,有的模块会短时间需要变化,或者能够定制不同模版的开发,用原生代码实现限制比较多,而且出现突发问题之后很难快速更新产品。
JSPatch诞生于2015年5月,可以使用JavaScript调用OC的原生接口,从而动态的植入代码替换旧的代码,以实现修复线上的bug。
JSPatch项目在github上有项目托管,3000star。
一、JSPatch的实现原理
基础原理
Objective-C是动态语言,具有运行时的特性,该特性可以通过类名称和方法名的字符串获取该类和该方法,并实例化和调用。
Class class = NSClassFromString("UIViewController");
id viewController =[ [class alloc]init];
SEL selector = NSSelectororFromString("viewDidload");
[viewController performSelector:selector];
也可以替换某个类的方法为新的实现:
static void newviewDidLoad(id self,SEL see){}
class_replaceMethod(class,selector,newViewDidLoad,@"")
还可以新注册一个类,为类添加新的方法
Class cls = objc_allocateClassPair(superCls,"JPObject",0);
objc_registerClassPair(cls)
class_addmethod(cls,selector,implement,typedesc);
JavaScript的调用
再补充~