美文网首页
jspatch原理简析

jspatch原理简析

作者: Adam_潜 | 来源:发表于2019-01-07 19:20 被阅读6次
    1. startEngine函数中, 给jscontext定义了一个方法
    context[@"_OC_defineClass"] = ^(NSString *classDeclaration, JSValue *instanceMethods, JSValue *classMethods) {
            return defineClass(classDeclaration, instanceMethods, classMethods);
        };
    
    1. 这个定义会在jspatch.js里面被运行
    2. 这个方法里面运行了defineClass
    3. 这个defineClass里面把所有demo.js里面的需要重载的方法都遍历一次
    4. 每次遍历的时候, 吧原来的方法给加到新的imp上(前缀ORIG)
    5. 然后再把原来的selector给换了, 换成_objc_msgForward, 这个_objc_msgForward函数的作用是: 当对象没有实现某个方法 ,会调用这个函数进行方法转发。 因此这些方法找不到了, 就全都转发给forwardInvocation了.
    6. 然后再hookforwardInvocation方法, 吧这个方法换成静态JPForwardInvocation方法,
    7. 在JPForwardInvocation中, 把根据selector的名字找到之前js中的代码, 运行这些代码.

    相关文章

      网友评论

          本文标题:jspatch原理简析

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