美文网首页iOS开发iOS学习专题
ios规避数组越界、字典空指针等崩溃(二)

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

作者: 世玉茹花 | 来源:发表于2018-12-18 14:28 被阅读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];

        }

    }

    相关文章

      网友评论

        本文标题:ios规避数组越界、字典空指针等崩溃(二)

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