美文网首页
JSPatch原理学习

JSPatch原理学习

作者: Nomo_C | 来源:发表于2018-05-02 21:06 被阅读0次

基础原理

OC为动态语言,OC上所有的方法调用/类的生成都通过Objective-C Runtime在运行时进行,可通过类名/方法名反射得到相应的类和方法:

Class class = NSClassFromString(@"UIViewController");
 id vc = [[class alloc] init];
 SEL sel = NSSelectorFromString(@"viewDidLoad");
 [vc performSelector:sel];

替换方法实现:

class_replaceMethod([self class], @selector(viewDidAppear:), (IMP)myViewDidApplear, "v@:B");
void myViewDidApplear(id self, SEL _cmd, BOOL animation){NSLog(@"myViewController");}

注册新类

Classcls =objc_allocateClassPair(superCls,"JPObject",0);objc_registerClassPair(cls);class_addMethod(cls, selector, implement, typedesc);

方法调用

require('UIView')
var view=UIView.alloc().init()
view.setBackgroundColor(require('UIColor').grayColor())
view.setAlpha(0.5)

require

在js全局作用域上创建一个同名的变量,变量指向一个对象,对象属性__clsName保存类名,同时表示这个对象是一个OC Class

调用接口

在OC执行脚本之前,将所有方法调用转换成调用__c()函数。js中调用OC的方法统一都经过__c()函数调用。

UIView.alloc().init()->UIView.__c('alloc')().__c('init')()

__c()中根据不同类型判断进行不同操作,_methodFunc就是把相关信息传递给OC,OC使用runtime调用相关接口

return _methodFunc(slf.__obj, slf.__clsName, methodName, args, slf.__isSuper)

_methodFunc中针对实例方法和对象方法进行不同处理

var ret = instance ? _OC_callI(instance, selectorName, args, isSuper):_OC_callC(clsName, selectorName, args

在+ (void)startEngine方法中对js方法进行处理

相关文章

  • JSPatch

    官方原理:https://github.com/bang590/JSPatch/wiki/JSPatch-实现原理...

  • JSPatch原理学习

    基础原理 OC为动态语言,OC上所有的方法调用/类的生成都通过Objective-C Runtime在运行时进行,...

  • JSPatch 学习 -- 基础原理分析

    �JSPatch是一个 iOS 动态更新框架,灵动轻巧,不用更新版本、不用更改原生代码,就能达到更新的效果 目录 ...

  • JSPatch学习笔记(二)

    这次笔记中主要描述的有: JSPath原理理解(学习作者大牛博客) JSPatch使用的时机 AppDelegat...

  • 十七、weex

    十七、weex 1.实现原理 2.热更新技术,JSPatch

  • JSPatch实现原理概述

    本着追本溯源的思想(以及面试官的要求……),结合JSPatch作者对JSPatch原理的解释,说一说个人对JSPa...

  • JSPatch原理解析(一)

    本篇开始以JSPatch给的demo代码为例按流程讲解JSPatch的实现原理首先在iOS的demo中在appde...

  • 好的博客或是文章收集

    iOS 逆向工程资料整理 http://dev.qq.com JSPatch实现原理详解:http://blog....

  • JSPatch 浅探

    前言 JSPatch下载地址自己实现JSPatch的功能 修改JSPatch JSPatch简介 JSPatch ...

  • JSPatch学习

    最近在做动态化方案看了很多相关的项目,rn、weex、luaview、lua+wax、jspatch等等,打算把其...

网友评论

      本文标题:JSPatch原理学习

      本文链接:https://www.haomeiwen.com/subject/ejfbfftx.html