在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到崩溃后,进行上报或者其它通知后台的操作,这样给用户的体验更好些,而且也可以收集到我们想要的崩溃信息了.
具体的实现见