在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中防止数组越界之后发生崩溃相关推荐

  1. c语言一维数组教学设计,C语言教学中一维数组教学设计.doc

    C语言教学中一维数组教学设计 C语言教学中一维数组教学设计 [摘 要] 数组是C语言中非常重要的概念,通常学生在初次接触到这一概念时感到很抽象.本文通过生活中常常接触到的超市储物柜与数组进行类比,将数 ...

  2. python中numpy数组的合并_基于Python中numpy数组的合并实例讲解

    基于Python中numpy数组的合并实例讲解 Python中numpy数组的合并有很多方法,如 - np.append() - np.concatenate() - np.stack() - np. ...

  3. c语言程序越界,浅析C语言编程中的数组越界问题

    因为C语言不检查数组越界,而数组又是我们经常用的数据结构之一,所以程序中经常会遇到数组越界的情况,并且后果轻者读写数据不对,重者程序crash.下面我们来分析一下数组越界的情况: 1) 堆中的数组越界 ...

  4. php如何对数组进行分组,如何在PHP中对数组进行分组排序

    如何在PHP中对数组进行分组排序 发布时间:2021-01-04 16:28:51 来源:亿速云 阅读:98 作者:Leah 这篇文章将为大家详细讲解有关如何在PHP中对数组进行分组排序,文章内容质量 ...

  5. php访问数组用引号_php双引号中访问数组元素报错如何解决

    最近在做微信公众号开发,在一个发送图文接口中,需要把数组元素拼接在XML字符串中,本文主要和大家分享一篇基于php双引号中访问数组元素报错的解决方法,具有很好的参考价值,希望对大家有所帮助.一起跟随小 ...

  6. java 静态对象数组_Java静态方法和实例方法 java中的数组作为形参传入

    原标题:Java静态方法和实例方法 java中的数组作为形参传入 Java静态方法和实例方法 java中的数组作为形参传入 Java虚拟机 启动一个Java程序的时候,会诞生一个虚拟机实例,当程序关闭 ...

  7. js解析java对象数组_js接收并转化Java中的数组对象的方法

    在做项目时,要向ocx控件下发命令,就要在js中得到java中的对象,然后拼成一种格式,下发下去...当对象是一个时比较简单,但如果对象是一个数组时,就略显麻烦了. 开始我以为有简单的方式,可以直接进 ...

  8. java多维数组题目_Java题库——chapter7 多维数组

    1)Which of the following statements are correct? 1) _______ A)char[ ][ ] charArray = {{'a', 'b'}, {' ...

  9. java常量数组吗_java – 如何在注释中使用数组常量

    我想为注释值使用常量. interface Client { @Retention(RUNTIME) @Target(METHOD) @interface SomeAnnotation { Strin ...

最新文章

  1. 分析型数据库受大数据市场追捧
  2. SSH整合教程(struts2+spring3+hibernate3)(含登陆示例)
  3. python 结构风险与经验风险 VC维 SRM SVM
  4. 解决sublime text无法安装插件问题
  5. verilog从txt中读取_Verilog中的文件操作
  6. python登录跳转_Python模拟登录和登录跳转的参考示例
  7. 未封装的扩展程序是什么意思_“冰壶见底未为清,少年如玉有诗名”这句诗是什么意思?...
  8. 心电电路算法滤波_简述心电信号采集原理及电路设计
  9. 行业揭秘:A股日内“T+0” 赚钱的方法
  10. 如何快速深入理解监控知识? | 技术干货
  11. 056 CSRF跨站请求伪造
  12. 化工行业借力APS生产排程
  13. 【福利】小米手机修改MAC地址教程
  14. 无法启动Windows安全中心服务怎么办
  15. 2018年阅读随笔记录(持续更新)
  16. 什么是WEB应用waf防火墙和DDOS高防IP?
  17. 大成都范围广告位招商
  18. 猎头职场:真正城府深的人都不会做这些
  19. 关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
  20. 探究 EIP-4488 —— Rollup 助燃剂

热门文章

  1. java生成四则运算表达式_生成四则运算(java实现)
  2. vb如何测试连接mysql_VB怎么连接访问Access数据库?
  3. minheight能继承吗_民法典亮点盘点 | 侄子能继承叔叔的遗产吗?
  4. vaps 程序直接通信
  5. 动态更新纹理闪烁问题
  6. 【转】libpcap实现机制及接口函数
  7. 【转】Vue.js入门教程(一)从静态页面到前后端分离开发
  8. 【转】Postman系列四:Postman接口请求设置环境变量和全局变量、测试沙箱和测试断言、测试集运行与导入数据文件
  9. 【转】Magento 2数据库EAV模型结构
  10. 让Team Foundation Server/TFS自动记住用户名密码解决方案