美文网首页工作生活
使用Runtime防止数组、字典越界

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

作者: 二斤寂寞 | 来源:发表于2019-07-03 20:22 被阅读0次

获取数组class

Method oldObjectAtIndex = class_getInstanceMethod(objc_getClass("__NSArrayI"), @selector(objectAtIndex:));

核心方法

#import "NSArray+ArrayBounds.h"
#import <objc/runtime.h>

@implementation NSArray (ArrayBounds)

+ (void)load {
    
    [super load];
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{  //方法交换只要一次就好
        Method oldObjectAtIndex = class_getInstanceMethod(objc_getClass("__NSArrayI"), @selector(objectAtIndex:));
        Method newObjectAtIndex = class_getInstanceMethod(objc_getClass("__NSArrayI"), @selector(change_objectAtIndex:));
        method_exchangeImplementations(oldObjectAtIndex, newObjectAtIndex);
    });
}

- (id)change_objectAtIndex:(NSUInteger)index{
    
    if (index > self.count - 1 || !self.count){
        return nil;
    }
    else{
        return [self change_objectAtIndex:index];
    }
}
@end

可变数组、字典、可变字典的崩溃问题等(思路和数组一致,获取类名的方法及对应的方法名不同而已)

Runtime替换字典

可变字典的类名: __NSDictionaryM
不可变字典的类名:__NSDictionaryI
可变数组的类名:__NSArrayM
不可变数组的类名:__NSArrayI

可以查看Runtime-Demo

相关文章

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

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

  • runtime使用之防止数组越界

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

  • iOS runtime之数据、字典越界及button重复点击处理

    一、runtime之数据、字典越界 方法交换 Runtime解决数据越界及字典key或value为nil的情况,主...

  • 用Runtime防止数组越界crash

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

  • 学习OC

    1.数组越界,字典取空问题解决 实现一个数组或者字典的扩展方法,判断数组或者字典是否为空或者越界,如果是返回对象,...

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

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

  • tableview 使用中防止数组越界

    在写项目的时候,调用下面的方法时 。 其实这是数组越界造成的:解决方案如下 增加了防止数组越界的判断,这句代码 i...

  • iOS常见的崩溃

    数组越界 字面量数组和字典插入nil值 字典 Unrecognized Selector NaN崩溃 富文本初始化...

  • 利用runtime来实现一个数组防崩溃替换

    前言 很多时候,我们常常在使用数组的时候因为数组越界而导致程序崩溃。我们通过runtime中的特殊手段,实现在运行...

  • 防止崩溃

    非字典转模型 数组越界 子线程刷UI 崩溃日志打印

网友评论

    本文标题:使用Runtime防止数组、字典越界

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