项目中遇到一个偶现crash,如图:
按道理-[__NSDictionaryM objectForKey:] 即便dict是nil或者key是nil都不会crash啊。况且还在主线程,测试过程中并没有crash。
查阅资料后:Stack Overflow上有同学反馈 NSMutableDictionary is not thread safe。所以先搞一个demo,在demo中模拟一下场景:
+ (NSMutableDictionary *)cacheDictionary{
static NSMutableDictionary *instance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[NSMutableDictionary alloc] init];
});
return instance;
}
+ (NSString *)openUDID{
NSMutableDictionary *dict = [self cacheDictionary];
// NSMutableDictionary *dict = [[self cacheDictionary] copy];//修复后代码
NSString *openUDID = nil;
int i = 0;
while (i<10000) {
openUDID = [dict objectForKey:@"kSTAD_OPEN