ios规避数组越界、字典空指针等崩溃(二)

接上个,记录下NSDictionary+Extension和NSMutableDictionary+Extension。

三、NSDictionary

+ (void)load

{

    staticdispatch_once_tonceToken;

    dispatch_once(&onceToken, ^{


        MethodorginalMethod =class_getInstanceMethod(NSClassFromString(@"__NSPlaceholderDictionary"),@selector(initWithObjects:forKeys:count:));


        MethodnewMethod =class_getInstanceMethod(NSClassFromString(@"__NSPlaceholderDictionary"),@selector(avoidCrashDictionaryWithObjects:forKeys:count:));

        method_exchangeImplementations(orginalMethod, newMethod);



    });

}

- (instancetype)avoidCrashDictionaryWithObjects:(constid  _Nonnull__unsafe_unretained*)objects forKeys:(constid  _Nonnull__unsafe_unretained*)keys count:(NSUInteger)cnt {

    idinstance =nil;

    @try{

        instance = [self avoidCrashDictionaryWithObjects:objects forKeys:keys count:cnt];

    }

    @catch(NSException *exception) {


    }

    @finally {

        returninstance;

    }

}



四、NSMutableDictionary

+(void)load

{

    staticdispatch_once_tonceToken;


    dispatch_once(&onceToken, ^{


        MethodorginalMethod =class_getInstanceMethod(NSClassFromString(@"__NSDictionaryM"),@selector(setObject:forKey:));

        MethodnewMethod =class_getInstanceMethod(NSClassFromString(@"__NSDictionaryM"),@selector(newsetObject:forKey:));

        method_exchangeImplementations(orginalMethod, newMethod);

    });


}

-(void)newsetObject:(id)object forKey:(id)key

{

    if(object !=nil) {

        [selfnewsetObject:objectforKey:key];

    }

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容