防止崩溃的runtime策略(NSArray、NSDictionary、NSString)
防止崩溃的runtime策略(NSArray、NSDictionary、NSString)
在使用NSArray(NSMutableArray)、NSString(NSMutableString)、NSDictionary(NSMutableDictionary)的操作时,避免因为数组越界、空值nil(如:服务端返回值异常)等造成的线上崩溃。
我们希望防止的是线上的崩溃(但要知道是否防止了崩溃、以及崩溃的具体信息),而在开发期间能正常暴露代码的问题、修复逻辑的不严谨性。
对于系统方法出现越界、插入空值等运行时候才能发现的问题,我们可以通过runtime的method swizzling进行全局的处理,给系统方法添加我们的容错处理(重要:最后还是要调用系统的方法)。
针对线上环境与开发环境,可以使用全局变量来区分。
(线上)崩溃信息,可以使用bugly来统计错误的堆栈信息。
类簇(以数组为例)
NSArray/NSMutableArray
NSPlaceholderArray alloc方法创建的工厂类
NSArray0 空数组
NSSingleObjectArrayI 一个元素的数组
NSArrayI 有多个元素的数组
__NSArrayM 可变数组
初始化:[__NSPlaceholderArray initWithObjects]
简便初始化方法、实例初始化方法、类初始化方法均会调用该方法
增删改查:
insertObject:atIndex: 增
setObject:atIndexedSubscript: 改
removeObjectAtIndex: 删
replaceObjectAtIndex:withObject: 改
objectAtIndex 查
对于runtime唯一的建议就是,需谨慎使用,一旦使用,必须先了解runtime的相关原理,做好预防措施,在添加完自己的代码之后,一定要调用系统原来的方法。