项目使用jspatch在线修复的一些心得

来源:互联网 发布:js encode 编辑:程序博客网 时间:2024/05/18 02:45

时间有限,先记录一下在使用jspatch的时候,遇到的一些难点和瓶颈
1、jspatch不能使用 delegate代理和block实现 模块之间的通信

2、jspatch不能使用oc定义的静态全局变量

3、不能使用 宏定义

4、var newStartOffset = NSString.stringWithFormat(“%d”, startOffset.intValue() + num.intValue()); 这种处理是有问题的,因为 后面的加法,必须是一个值,jspatch不会帮你计算

5、 var total = startOffset.intValue() + num.intValue();

var newStartOffset = NSString.stringWithFormat(“%d”, total); //计算本次请求的index

var newLimit = NSString.stringWithFormat(“%@,%@”, newStartOffset, num);

这种方式貌似得出来的结果不正确,直接改成:

var newStartOffset = startOffset.intValue() + num.intValue(); //计算本次请求的index

var newLimit = NSString.stringWithFormat(“%@,%@”, newStartOffset, num);

6、一个block作为函数的参数传递进来,然后在函数内部执行这个block会有问题,经常会提示:block is not a function. (‘block’ is an instance of Object)

临时想到的解决方案:通过给self添加一个delegate属性,然后将block的执行,改成通过delegate执行。

一旦这个block对应执行delegate多个不同的函数时,问题就复杂化了。目前我的解决方法是,另外再新增一个函数的标识属性,分别拿来对应这些不同的函数,一旦这些函数执行,首先给这个属性赋值,然后在最后执行block方法时,根据这个标识,就可以知道具体要执行的是delegate对应的哪个方法了。

但是上面提到的这种 通过delegate解决block的问题,是有风险的,极大的风险,就是如果 block是在 异步线程中调用,那么 通过这种方式去调用,是很容易引起闪退的,我目前猜测原因是异步回调回来,delegate已经被释放了,这时候再调用,就会闪退。

总结为一句话:JSPatch在线修复不是万能的,存在太多的限制,不能说是坑,是大大的限制,所以,不要想着有了 JSPatch 就万事大吉了,好好写代码,好好提高代码质量,app上线后尽量不要出bug吧。

我自己就经历过 无法通过JSPatch来在线修复线上bug的问题,尽管这个bug很容易改(通过原生只需要改动一两行代码的事情),但是JSPatch就是无法解决,或许是我技术不够强吧,鬼知道我经历了什么?

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 如果孩子偷钱怎么办 小孩在家偷钱怎么办 买了西晒房怎么办 乳胶漆有打磨痕迹怎么办 墙上乳胶漆用水擦完太亮了怎么办 外墙腻子不好打磨怎么办 腻子打磨的灰尘怎么办 家里的壁纸脏了怎么办 家装用冷风管冬天取暖怎么办? 房子装修冷色系怎么办 高血压突然变低血压怎么办 玩单机游戏卡顿怎么办 老人血压太低怎么办 老年人血压太低怎么办 觉总是不够睡怎么办 老年人气不够用怎么办 卧室晒不到太阳怎么办 农村房子墙角受潮怎么办 房间里面有虫子怎么办 墙壁发霉生虫子怎么办 墙壁发霉有虫子怎么办 墙面发霉有虫子怎么办 白漆墙面脏了怎么办 房间贴完墙墙面发霉怎么办? 家里的墙壁发霉怎么办 黑豆生虫了怎么办 家具有小虫子怎么办 店铺对面有镜子怎么办 房间里有蛆虫怎么办 房间里有虫子怎么办 小宝宝发烧了怎么办啊 小孩不盖被子怎么办 孩子不爱盖被子怎么办 宝宝不喜欢盖被子怎么办 被单上染上颜色怎么办 白漆不够白怎么办 衣柜推拉门门缝宽怎么办 推拉门时声音大怎么办 电子门坏掉了怎么办 厨柜门坏掉了怎么办 乳胶漆刷花了怎么办