12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- //
- // NSMutableDictionary+Safe.m
- // MSYOUPAI
- //
- // Created by YoMi on 2023/11/7.
- //
- #import "NSMutableDictionary+Safe.h"
- #import "NSObject+Swizzling.h"
- #import <objc/runtime.h>
- @implementation NSMutableDictionary (Safe)
- #pragma mark --- init method
- + (void)load {
- //只执行一次这个方法
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
-
- // 替换 removeObjectForKey:
- NSString *tmpRemoveStr = @"removeObjectForKey:";
- NSString *tmpSafeRemoveStr = @"safeMutable_removeObjectForKey:";
-
- [NSObject exchangeInstanceMethodWithSelfClass:NSClassFromString(@"__NSDictionaryM")
- originalSelector:NSSelectorFromString(tmpRemoveStr) swizzledSelector:NSSelectorFromString(tmpSafeRemoveStr)];
-
-
-
- // 替换 setObject:forKey:
- NSString *tmpSetStr = @"setObject:forKey:";
- NSString *tmpSafeSetRemoveStr = @"safeMutable_setObject:forKey:";
-
- [NSObject exchangeInstanceMethodWithSelfClass:NSClassFromString(@"__NSDictionaryM")
- originalSelector:NSSelectorFromString(tmpSetStr) swizzledSelector:NSSelectorFromString(tmpSafeSetRemoveStr)];
-
- });
-
- }
- #pragma mark --- implement method
- /**
- 根据akey 移除 对应的 键值对
-
- @param aKey key
- */
- - (void)safeMutable_removeObjectForKey:(id<NSCopying>)aKey {
- if (!aKey) {
- return;
- }
- [self safeMutable_removeObjectForKey:aKey];
- }
- /**
- 将键值对 添加 到 NSMutableDictionary 内
-
- @param anObject 值
- @param aKey 键
- */
- - (void)safeMutable_setObject:(id)anObject forKey:(id<NSCopying>)aKey {
- if (!anObject) {
- return;
- }
- if (!aKey) {
- return;
- }
- return [self safeMutable_setObject:anObject forKey:aKey];
- }
- @end
|