美文网首页
iOS数组越界

iOS数组越界

作者: 七秒归零 | 来源:发表于2021-12-29 22:55 被阅读0次

    数组的越界处理:

        对NSArray添加分类,使用runtime的hook,替换对应的方法。

         self.dataArray[4] 的下标取值,对应的是数组的objectAtIndexedSubscript方法

        objectAtIndex的取值,对应的是数组的objectAtIndex方法

        使用runtime对两个方法进行拦截替换,就可以实现数据的异常处理。

        load方法中是使用GCD的单例方法,是避免用户错误调用出现多次交换,导致的错误。

    + (void)load{

        staticdispatch_once_tonceToken;

        dispatch_once(&onceToken, ^{

            MethodoriMethod =class_getInstanceMethod(NSClassFromString(@"__NSArrayI"),@selector(objectAtIndex:));

            MethodswiMethod =class_getInstanceMethod(NSClassFromString(@"__NSArrayI"),@selector(lg_objectAtIndex:));

            method_exchangeImplementations(oriMethod, swiMethod);

            MethodoriMethod1 =class_getInstanceMethod(NSClassFromString(@"__NSArrayI"),@selector(objectAtIndexedSubscript:));

            MethodswiMethod1 =class_getInstanceMethod(NSClassFromString(@"__NSArrayI"),@selector(lg_objectAtIndexedSubscript:));

            method_exchangeImplementations(oriMethod1,swiMethod1);

        });

    }

    // 交换的方法

    - (id)lg_objectAtIndex:(NSUInteger)index{

        if(index >self.count-1) {

            NSLog(@"数组越界 -- ");

            returnnil;

        }

        return [self lg_objectAtIndex:index];

    }

    - (id)lg_objectAtIndexedSubscript:(NSUInteger)idx {

        if(idx >self.count-1){

            NSLog(@"取值越界了,请记录");

            returnnil;

        }

        return [self lg_objectAtIndexedSubscript:idx];

    }

    相关文章

      网友评论

          本文标题:iOS数组越界

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