JSPatch学习(一)

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

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

platform:ios,'7.0'
target "JsPatchDemo" do
pod '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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值