JSPatch学习(一)

来源:互联网 发布:网络的定义与形成 编辑:程序博客网 时间:2024/05/15 14:00

JSPatch是bang大神的,最近有项目需要热更新,由于项目已经开发好了,只是担心在上线过程中有潜在的问题,用热更新可以将潜在的bug在用户打开APP的时候更新掉,于是开始学习中 ~~~

JSPatch的官方文档
1、接入,平台建议cocoapods集成

platform:ios,'7.0'target "JsPatchDemo" dopod 'JSPatchPlatform'pod 'JSPatch'pod 'JSPatch/Extensions'pod 'JSPatch/JPCFunction'end

2、使用
在main.js中,先找到我们oc中的方法,然后用js的方式改写、添加、覆盖我们oc的方法,若是一个方法体很长,可以把我们oc的代码拷贝在平台的转换工具中,可自动转为相对应的js的方法,再拷贝到main.js中。

3、demo
1)、给按钮添加事件

defineClass(classDeclaration, [properties,] instanceMethods, classMethods)@param classDeclaration: 字符串,类名/父类名和Protocol@param properties: 新增property,字符串数组,可省略@param instanceMethods: 要添加或覆盖的实例方法@param classMethods: 要添加或覆盖的类方法    defineClass('ViewController',{        onClick: function() {//添加按钮事件        console.log('onclick .....')            },{}     })

2)、修改已经实现的方法

defineClass('ViewController',{    tableView_didSelectRowAtIndexPath: function(tableView,indexPath) {//复写tableview的点击cell方法        console.log('Yuna')            },{}  })

3)、给属性赋值

//oc中定义data,但是没有初始化和赋值,在main.js中给这个data赋值,并可以使用@property (nonatomic) NSArray *data;//重写viewdidload方法defineClass('ViewController',{    viewDidLoad: function() {            self.createTable();//调用原来的方法,创建列表            //获取/修改 OC 定义的 Propert            var data = self.data();             var da = [];            for (var i = 0; i < 20; i ++) {                da.push("js " + i);            }            self.setData(da);            console.log(da);//打印出来            self.reFreah();//刷新tableview    }})

4)、私有成员变量
使用 valueForKey() 和 setValue_forKey() 获取/修改私有成员变量

//OC声明的,但是没有初始化和赋值@interface ViewController (){     NSArray *dicArray;}//main.js中defineClass('ViewController',{    onClick: function() {//添加按钮事件        console.log('onclick .....')            },    tableView_didSelectRowAtIndexPath: function(tableView,indexPath) {//复写tableview的点击cell方法        console.log('Yuna')            },    viewDidLoad: function() {               var dicArray = self.valueForKey("dicArray")     //get member variables            self.setValue_forKey(["JSPatch"], "dicArray")            self.reFreah();            //在OC的这个方法中可以打印出dicArray的值    }})

打开我们的项目工程,我们测试下我们的js,是否可以更新掉,我们可以讲main.js 托人项目中,然后在

#import <JSPatchPlatform/JSPatch.h>- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    [JSPatch testScriptInBundle];   }

运行模拟器,就可以直接运行我们在js中写的代码了,热更新成功了。注意
这里写图片描述

0 0
原创粉丝点击