Files
yuyin_ios/SweetParty/第三方库/AvoidCrash/NSMutableDictionary+AvoidCrash.m

96 lines
2.8 KiB
Mathematica
Raw Normal View History

2025-08-08 11:05:33 +08:00
//
// NSMutableDictionary+AvoidCrash.m
// https://github.com/chenfanfang/AvoidCrash
//
// Created by mac on 16/9/22.
// Copyright © 2016 chenfanfang. All rights reserved.
//
#import "NSMutableDictionary+AvoidCrash.h"
#import "AvoidCrash.h"
@implementation NSMutableDictionary (AvoidCrash)
+ (void)avoidCrashExchangeMethod {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
Class dictionaryM = NSClassFromString(@"__NSDictionaryM");
//setObject:forKey:
[AvoidCrash exchangeInstanceMethod:dictionaryM method1Sel:@selector(setObject:forKey:) method2Sel:@selector(avoidCrashSetObject:forKey:)];
//setObject:forKeyedSubscript:
if (AvoidCrashIsiOS(11.0)) {
[AvoidCrash exchangeInstanceMethod:dictionaryM method1Sel:@selector(setObject:forKeyedSubscript:) method2Sel:@selector(avoidCrashSetObject:forKeyedSubscript:)];
}
//removeObjectForKey:
Method removeObjectForKey = class_getInstanceMethod(dictionaryM, @selector(removeObjectForKey:));
Method avoidCrashRemoveObjectForKey = class_getInstanceMethod(dictionaryM, @selector(avoidCrashRemoveObjectForKey:));
method_exchangeImplementations(removeObjectForKey, avoidCrashRemoveObjectForKey);
});
}
//=================================================================
// setObject:forKey:
//=================================================================
#pragma mark - setObject:forKey:
- (void)avoidCrashSetObject:(id)anObject forKey:(id<NSCopying>)aKey {
@try {
[self avoidCrashSetObject:anObject forKey:aKey];
}
@catch (NSException *exception) {
[AvoidCrash noteErrorWithException:exception defaultToDo:AvoidCrashDefaultIgnore];
}
@finally {
}
}
//=================================================================
// setObject:forKeyedSubscript:
//=================================================================
#pragma mark - setObject:forKeyedSubscript:
- (void)avoidCrashSetObject:(id)obj forKeyedSubscript:(id<NSCopying>)key {
@try {
[self avoidCrashSetObject:obj forKeyedSubscript:key];
}
@catch (NSException *exception) {
[AvoidCrash noteErrorWithException:exception defaultToDo:AvoidCrashDefaultIgnore];
}
@finally {
}
}
//=================================================================
// removeObjectForKey:
//=================================================================
#pragma mark - removeObjectForKey:
- (void)avoidCrashRemoveObjectForKey:(id)aKey {
@try {
[self avoidCrashRemoveObjectForKey:aKey];
}
@catch (NSException *exception) {
[AvoidCrash noteErrorWithException:exception defaultToDo:AvoidCrashDefaultIgnore];
}
@finally {
}
}
@end