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
- JSPatch学习(一)
- JSPatch学习(二)
- JSPatch文档整理(一)
- JSPatch学习
- JSPatch学习系列-JSPatch简介
- JSPatch OC->JS学习(1)
- JSPatch OC->JS学习(2)
- JSPatch源码剖析(一)
- JSPatch的初步学习
- 热更新JSPatch学习:
- iOS之动态热修复技术JSPatch(一)
- JSPatch
- JSPatch
- JSPatch
- JSPatch
- JSPatch
- JSPatch
- jsPatch
- 关于Android点击物理返回键退出程序的问题
- CSS之文字属性
- 如何将ios键盘返回由英文设置成中文
- Zookeeper 实现原理
- spring boot 实际应用(四)log4j2 整合
- JSPatch学习(一)
- android 手机屏幕密度等级和屏幕逻辑尺寸
- EF修改实体状态(State)时出现异常找不到方法“System.Data.Entity.Infrastructure.set_State”
- C# 用file 上传文件大小时判断文件大小 file onchange 事件为什么只执行一次解决方案
- No identifier specified for entit失误记录
- MySQL大内存配置方案 如my-medium.ini、my-huge.ini等
- 分布式服务框架 Zookeeper -- 管理分布式环境中的数据
- matlab读取RGB数据
- HTML5离线缓存Manifest是什么