iOS开发iOS学习专题

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

2018-12-18  本文已影响1人  世玉茹花

接上个,记录下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];

    }

}

上一篇 下一篇

猜你喜欢

热点阅读