博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Method Swizzling 处理一类简单的崩溃
阅读量:6200 次
发布时间:2019-06-21

本文共 994 字,大约阅读时间需要 3 分钟。

hot3.png

    在C/S开发时,程序员经常会由于粗心,或者服务端不经客户端添加一些数据,如果代码写的不够严谨,经常会出现数组访问越界一类的崩溃,如何出现问题了,可以不崩溃,只是进行上报,后台收集到信息后利用JSPatch或者其他工具进行修复.

    这里核心的就是一个方法

OBJC_EXPORT void method_exchangeImplementations(Method m1, Method m2)      __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);

这里有2个参数,2个要在运行时交换的方法.

Foundation框架里objectAtIndex是不带有越界检测功能的,so,我们可以自己重写objectAtIndex并实现越界检测的功能.

- (instancetype)safe_objectAtIndex:(NSUInteger)index {    if (self.count - 1 < index) {        @try {            return [self safe_objectAtIndex:index];        }        @catch (NSException *exception) {            NSLog(@"---------- %s Crash Because Method %s  ----------\n", class_getName(self.class), __func__);            NSLog(@"%@", [exception callStackSymbols]);            return nil;        }        @finally {        }    } else {        return [self safe_objectAtIndex:index];    }    }

这里实现一个safe_objectAtIndex,并对越界进行判断.当catch到崩溃后,进行上报或者其它通知后台的操作,这样给用户的体验更好些,而且也可以收集到我们想要的崩溃信息了.

具体的实现见

转载于:https://my.oschina.net/u/2435827/blog/616053

你可能感兴趣的文章
Python学习笔记(随笔)
查看>>
阿里数据库内核月报:2017年09月
查看>>
最主流的Java后台 SSM 框架 springmvc spring mybatis 项目源码
查看>>
Spring Boot 数据库连接池 HikariCP
查看>>
Python中使用os.system函数调用外部命令
查看>>
Spring源码分析
查看>>
LeetCode 1——两数之和
查看>>
MySQL单机上多实例安装
查看>>
【翻译】WWDC 2019 :优秀的开发习惯
查看>>
RAC使用(一)——关键字
查看>>
2019年成为优秀的Java开发人员的10个技巧
查看>>
event 事件 clientX 和clientY 配合scrollTop使用, div跟着鼠标走
查看>>
web容器漏洞
查看>>
JS判断用户终端,跳转到不同的页面.
查看>>
Java多态
查看>>
设置Grid某列的Title样式和列内数据样式
查看>>
C++引用
查看>>
Java中对象的上转型对象
查看>>
Android Fragment 你应该知道的一切
查看>>
镜面翻转
查看>>