美文网首页iOS集合
用Runtime防止数组越界crash

用Runtime防止数组越界crash

作者: 330b92bcaf74 | 来源:发表于2017-07-21 14:02 被阅读0次

利用runtime可以实现交换系统方法这一强大功能,下面将利用这一功能实现即使数组越界也不会crash这一功能。

#import "NSMutableArray+RZ.h"
#import <objc/runtime.h>


@implementation NSMutableArray (RZ)

+ (void)load {
 
    //系统方法
    Method sysMethod = class_getInstanceMethod(NSClassFromString(@"__NSArrayM"), @selector(objectAtIndex:));
    //自定义方法
    Method safeMethod = class_getInstanceMethod(NSClassFromString(@"__NSArrayM"), @selector(safeObjectAtIndex:));

    //交换
    method_exchangeImplementations(sysMethod, safeMethod);

}


- (id)safeObjectAtIndex:(NSInteger)index {
    
    if (index > (self.count - 1)) {
//        NSAssert(NO, @"beyond the bound");
        return nil;
    }else if([self safeObjectAtIndex:index] == nil){
//        NSAssert(NO, @"beyond bounds for empty array");
        return nil;
    }else{
        return [self safeObjectAtIndex:index];
    }
    
}

NSAssert()只是一个宏,用于开发阶段调试程序中的Bug,通过为NSAssert()传递条件表达式来断定是否属于Bug,满足条件返回真值,程序继续运行,如果返回假值,则抛出异常,并切可以自定义异常描述。NSAssert()是这样定义的:

define NSAssert(condition, desc)

condition是条件表达式,值为YES或NO;desc为异常描述,通常为NSString。当conditon为YES时程序继续运行,为NO时,则抛出带有desc描述的异常信息。NSAssert()可以出现在程序的任何一个位置。

另外.....

我的愿望是.......

世界和平.........

相关文章

  • 用Runtime防止数组越界crash

    利用runtime可以实现交换系统方法这一强大功能,下面将利用这一功能实现即使数组越界也不会crash这一功能。 ...

  • iOS数组防止越界crash

    有时候项目中总是出现一些无法预知的情况,导致数组越界是程序crash,如果这种意外情况无法避免,那么只能从侧面采取...

  • 防止数组越界Crash示例

  • runtime使用之防止数组越界

    面试时曾被问到一个问题,如何使用runtime防止数组越界?当时想到的是用分类重写系统的ObjectAtIndex...

  • Crash防护

    Container crash(数组越界,插nil等)NSString crash (字符串操作的crash)NS...

  • 使用Runtime防止数组、字典越界

    获取数组class 核心方法 可变数组、字典、可变字典的崩溃问题等(思路和数组一致,获取类名的方法及对应的方法名不...

  • Try_Catch_finally

    数组越界等Crash时没问题,但野指针时依然会崩溃。

  • iOS 数组越界 Crash处理

    我们先来看看有可能会出现的数组越界Crash的地方; 上面代码是有可能会越界的;出现Crash也不好复现,发出去的...

  • OC-runtime-防止数组越界(全局方式)

    数组越界问题,解决方法也简单,就是使用runtime进行方法交换,在自定义方法中进行规避越界的情况。 但可能也没那...

  • iOS防止数组越界

    可以直接hook数组的objectIndex方法进行判断,但是一定要记住,NSArray真正的类型是__NSArr...

网友评论

    本文标题:用Runtime防止数组越界crash

    本文链接:https://www.haomeiwen.com/subject/igaskxtx.html