? ? ? ? 經(jīng)常性的在原生開(kāi)發(fā)App過(guò)程中會(huì)遇到因?yàn)樾枨蟮脑颍械哪K會(huì)短時(shí)間需要變化,或者能夠定制不同模版的開(kāi)發(fā)欲账,用原生代碼實(shí)現(xiàn)限制比較多,而且出現(xiàn)突發(fā)問(wèn)題之后很難快速更新產(chǎn)品芭概。
? ? ? ? JSPatch誕生于2015年5月赛不,可以使用JavaScript調(diào)用OC的原生接口,從而動(dòng)態(tài)的植入代碼替換舊的代碼罢洲,以實(shí)現(xiàn)修復(fù)線上的bug踢故。
? ? ? ? JSPatch項(xiàng)目在github上有項(xiàng)目托管,3000star惹苗。
一殿较、JSPatch的實(shí)現(xiàn)原理
基礎(chǔ)原理
Objective-C是動(dòng)態(tài)語(yǔ)言,具有運(yùn)行時(shí)的特性桩蓉,該特性可以通過(guò)類名稱和方法名的字符串獲取該類和該方法淋纲,并實(shí)例化和調(diào)用。
Class class = NSClassFromString("UIViewController");
id viewController =[ [class alloc]init];
SEL selector = ?NSSelectororFromString("viewDidload");
[viewController performSelector:selector];
也可以替換某個(gè)類的方法為新的實(shí)現(xiàn):
static void newviewDidLoad(id self触机,SEL see){}
class_replaceMethod(class,selector,newViewDidLoad,@"")
還可以新注冊(cè)一個(gè)類帚戳,為類添加新的方法
Class cls = ?objc_allocateClassPair(superCls,"JPObject",0);
objc_registerClassPair(cls)
class_addmethod(cls,selector,implement,typedesc);
JavaScript的調(diào)用
再補(bǔ)充~