接上个,记录下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];
}
}
网友评论