ios 数组越界奔溃库_iOS中防止数组越界之后发生崩溃
在iOS开发中有时会遇到数组越界的问题,从而导致程序崩溃。为了防止程序崩溃,我们就要对数组越界进行处理。通过上网查资料,发现可以通过为数组写一个分类来解决此问题。
基本思路:为NSArray写一个防止数组越界的分类。分类中利用runtime将系统中NSArray的对象方法objectAtIndex:替换,然后对objectAtIndex:传递过来的下标进行判断,如果发生数组越界就返回nil,如果没有发生越界,就继续调用系统的objectAtIndex:方法。
代码:
.h文件:
#import
#import
@interface NSArray (beyond)
@end
.m文件:
#import "NSArray+beyond.h"
@implementation NSArray (beyond)
+ (void)load{
[superload];
// 替换不可变数组中的方法
Method oldObjectAtIndex =class_getInstanceMethod(objc_getClass("__NSArrayI"),@selector(objectAtIndex:));
Method newObjectAtIndex =class_getInstanceMethod(objc_getClass("__NSArrayI"),@selector(__nickyTsui__objectAtIndex:));
method_exchangeImplementations(oldObjectAtIndex, newObjectAtIndex);
// 替换可变数组中的方法
Method oldMutableObjectAtIndex =class_getInstanceMethod(objc_getClass("__NSArrayM"),@selector(objectAtIndex:));
Method newMutableObjectAtIndex = class_getInstanceMethod(objc_getClass("__NSArrayM"),@selector(mutableObjectAtIndex:));
method_exchangeImplementations(oldMutableObjectAtIndex, newMutableObjectAtIndex);
}
- (id)__nickyTsui__objectAtIndex:(NSUInteger)index{
if (index >self.count -1 || !self.count){
@try {
return [self__nickyTsui__objectAtIndex:index];
} @catch (NSException *exception) {
//__throwOutException 抛出异常
NSLog(@"数组越界...");
returnnil;
} @finally {
}
}
else{
return [self__nickyTsui__objectAtIndex:index];
}
}
- (id)mutableObjectAtIndex:(NSUInteger)index{
if (index >self.count -1 || !self.count){
@try {
return [selfmutableObjectAtIndex:index];
} @catch (NSException *exception) {
//__throwOutException 抛出异常
NSLog(@"数组越界...");
returnnil;
} @finally {
}
}
else{
return [selfmutableObjectAtIndex:index];
}
}
ios 数组越界奔溃库_iOS中防止数组越界之后发生崩溃相关推荐
- c语言一维数组教学设计,C语言教学中一维数组教学设计.doc
C语言教学中一维数组教学设计 C语言教学中一维数组教学设计 [摘 要] 数组是C语言中非常重要的概念,通常学生在初次接触到这一概念时感到很抽象.本文通过生活中常常接触到的超市储物柜与数组进行类比,将数 ...
- python中numpy数组的合并_基于Python中numpy数组的合并实例讲解
基于Python中numpy数组的合并实例讲解 Python中numpy数组的合并有很多方法,如 - np.append() - np.concatenate() - np.stack() - np. ...
- c语言程序越界,浅析C语言编程中的数组越界问题
因为C语言不检查数组越界,而数组又是我们经常用的数据结构之一,所以程序中经常会遇到数组越界的情况,并且后果轻者读写数据不对,重者程序crash.下面我们来分析一下数组越界的情况: 1) 堆中的数组越界 ...
- php如何对数组进行分组,如何在PHP中对数组进行分组排序
如何在PHP中对数组进行分组排序 发布时间:2021-01-04 16:28:51 来源:亿速云 阅读:98 作者:Leah 这篇文章将为大家详细讲解有关如何在PHP中对数组进行分组排序,文章内容质量 ...
- php访问数组用引号_php双引号中访问数组元素报错如何解决
最近在做微信公众号开发,在一个发送图文接口中,需要把数组元素拼接在XML字符串中,本文主要和大家分享一篇基于php双引号中访问数组元素报错的解决方法,具有很好的参考价值,希望对大家有所帮助.一起跟随小 ...
- java 静态对象数组_Java静态方法和实例方法 java中的数组作为形参传入
原标题:Java静态方法和实例方法 java中的数组作为形参传入 Java静态方法和实例方法 java中的数组作为形参传入 Java虚拟机 启动一个Java程序的时候,会诞生一个虚拟机实例,当程序关闭 ...
- js解析java对象数组_js接收并转化Java中的数组对象的方法
在做项目时,要向ocx控件下发命令,就要在js中得到java中的对象,然后拼成一种格式,下发下去...当对象是一个时比较简单,但如果对象是一个数组时,就略显麻烦了. 开始我以为有简单的方式,可以直接进 ...
- java多维数组题目_Java题库——chapter7 多维数组
1)Which of the following statements are correct? 1) _______ A)char[ ][ ] charArray = {{'a', 'b'}, {' ...
- java常量数组吗_java – 如何在注释中使用数组常量
我想为注释值使用常量. interface Client { @Retention(RUNTIME) @Target(METHOD) @interface SomeAnnotation { Strin ...
最新文章
- 分析型数据库受大数据市场追捧
- SSH整合教程(struts2+spring3+hibernate3)(含登陆示例)
- python 结构风险与经验风险 VC维 SRM SVM
- 解决sublime text无法安装插件问题
- verilog从txt中读取_Verilog中的文件操作
- python登录跳转_Python模拟登录和登录跳转的参考示例
- 未封装的扩展程序是什么意思_“冰壶见底未为清,少年如玉有诗名”这句诗是什么意思?...
- 心电电路算法滤波_简述心电信号采集原理及电路设计
- 行业揭秘:A股日内“T+0” 赚钱的方法
- 如何快速深入理解监控知识? | 技术干货
- 056 CSRF跨站请求伪造
- 化工行业借力APS生产排程
- 【福利】小米手机修改MAC地址教程
- 无法启动Windows安全中心服务怎么办
- 2018年阅读随笔记录(持续更新)
- 什么是WEB应用waf防火墙和DDOS高防IP?
- 大成都范围广告位招商
- 猎头职场:真正城府深的人都不会做这些
- 关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
- 探究 EIP-4488 —— Rollup 助燃剂
热门文章
- java生成四则运算表达式_生成四则运算(java实现)
- vb如何测试连接mysql_VB怎么连接访问Access数据库?
- minheight能继承吗_民法典亮点盘点 | 侄子能继承叔叔的遗产吗?
- vaps 程序直接通信
- 动态更新纹理闪烁问题
- 【转】libpcap实现机制及接口函数
- 【转】Vue.js入门教程(一)从静态页面到前后端分离开发
- 【转】Postman系列四:Postman接口请求设置环境变量和全局变量、测试沙箱和测试断言、测试集运行与导入数据文件
- 【转】Magento 2数据库EAV模型结构
- 让Team Foundation Server/TFS自动记住用户名密码解决方案