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];

    }

}

你可能感兴趣的:(ios规避数组越界、字典空指针等崩溃(二))