Objective-c防止数组越界而崩溃(全局效果)
2017-02-14 17:17
375 查看
数组越界其实是很基本的问题,但是解决起来除了count的判断,还有每个调用的时候都要去判断一遍
对于不明确的数据总会有崩溃的风险
然而 每次调用都判断 那是太累了
so 。。runtime&category提供了一个比较简洁的解决方案
首先把NSArray/NSMutableArray的objectAtIndex方法通过objc的runtime 里面method swizzle把方法进行替换
可以看到 旧方法跟新方法的名字(在上面两个selector里面)
接着写上新方法即可
在新方法里面做越界判断
把这个NSArray的category加到pch就好了。。
转载自:http://www.cnblogs.com/n1ckyxu/p/6047556.html
对于不明确的数据总会有崩溃的风险
然而 每次调用都判断 那是太累了
so 。。runtime&category提供了一个比较简洁的解决方案
首先把NSArray/NSMutableArray的objectAtIndex方法通过objc的runtime 里面method swizzle把方法进行替换
+ (void)load{ [super load]; Method oldObjectAtIndex = class_getInstanceMethod(objc_getClass("__NSArrayI"), @selector(objectAtIndex:)); Method newObjectAtIndex = class_getInstanceMethod(objc_getClass("__NSArrayI"), @selector(__nickyTsui__objectAtIndex:)); method_exchangeImplementations(oldObjectAtIndex, newObjectAtIndex); }
可以看到 旧方法跟新方法的名字(在上面两个selector里面)
接着写上新方法即可
在新方法里面做越界判断
- (id)__nickyTsui__objectAtIndex:(NSUInteger)index{ if (index > self.count - 1 || !self.count){ @try { return [self __nickyTsui__objectAtIndex:index]; } @catch (NSException *exception) { //__throwOutException 抛出异常 return nil; } @finally { } } else{ return [self __nickyTsui__objectAtIndex:index]; } }
把这个NSArray的category加到pch就好了。。
转载自:http://www.cnblogs.com/n1ckyxu/p/6047556.html
相关文章推荐
- Objective-c防止数组越界而崩溃(全局效果)
- iOS中防止数组越界之后发生崩溃
- 工具类:防止数组越界崩溃问题(NSArray 分类/runtime 用法3:交换方法)
- 怎样防止数组越界错误?
- Objective-C中使用@try处理异常,防止程序崩溃
- iOS之利用runtime,避免可变数组和可变字典为nil或者数组越界导致的崩溃
- 防止数组越界处理
- iOS 防止数组越界 对象类型不一致的安全处理 使用category对nsmutablearray处理
- ios 使用运行时规避数组等越界导致程序崩溃
- 数组越界导致的运行崩溃(枚举作为数组中的常量)
- C++中将数组作为形参时防止访问越界的几种方法
- UIPickview 省市联动注意点(如何防止同时两组或多组滑动时,数组越界问题)
- iOS - 数组,字典打印以及防止数组取值越界字典插入nil
- 如何处理数组越界而不会让程序崩溃?
- Thinking in java 多线程导致数组越界崩溃的BUG
- ios 11以上系统,tableview上啦刷新,indexPath.row,自动加5,引起数组越界的问题导致崩溃
- 重点在确定字符数组的长度!!防止数组越界
- iOS8 - tableView: canEditRowAtIndexPath: 因数组越界崩溃
- Android 通过Application捕获全局异常,防止程序崩溃退出
- 利用runtime,避免UIButton 重复点击, 可变数组和可变字典为nil,或者数组越界导致的崩溃