Objective c NSMutableDictionary检查的快速方法

Objective c NSMutableDictionary检查的快速方法,objective-c,nsmutabledictionary,Objective C,Nsmutabledictionary,我正在进行一些应用程序优化,在大循环中,对NSMutableDictionary的检查相当繁重: if ([self.variantBufferSequence objectForKey:[variant valueForKey:@"model_no"]] == nil) { [self.variantBufferSequence setObject:[NSMutableDictionary new] forKey:[variant valueForKey:@"model_no"]];

我正在进行一些应用程序优化,在大循环中,对NSMutableDictionary的检查相当繁重:

if ([self.variantBufferSequence objectForKey:[variant valueForKey:@"model_no"]] == nil) {
    [self.variantBufferSequence setObject:[NSMutableDictionary new] forKey:[variant valueForKey:@"model_no"]];
}

是否有一种更简便的方法来检查
if
-语句中是否存在条目(
objectForKey
)?

在objc和clang的最新版本中,您可以使用更紧凑的符号检查字典中是否存在键

这个小例子对我很有用:

NSMutableDictionary *description = @{@"model_no":@"key1"}.mutableCopy;
NSMutableDictionary *dictionary = @{@"key1":@"value1"}.mutableCopy;

if(dictionary[description[@"model_no"]]){
    NSLog(@"It exists!");
} else {
    NSLog(@"It doesn't exists!");
}
尝试将
说明
中的
key1
替换为
key2


您是否检查了大部分时间是否花在
objectForKey
上?为什么您认为
objectForKey:
调用比
valueForKey
调用更昂贵(这通常是两者中较慢的一个,并且可能非常慢)。什么是变体?这个测试可能经常是真的吗?当你分析这个的时候仪器说了什么?单独优化一行代码很少是正确的方法;什么值在循环中发生变化?这个字典有多大?在我的测试中,
objectForKey:
比订阅稍微快一点(我怀疑
objectforkeydsubscript:
是作为对
objectForKey:
的调用实现的)。我认为这两种方法都没有多大关系,但您有没有理由相信这种方法比OP的代码更快?(忽略删除
valueForKey:
,这只在
variant
是字典时有效。)这给了我一个非常小的速度提升
variant
确实是一个具有大约20个小值的可变字典。我用时间分析器反复测试,得到了大约5%的增益。我希望有更壮观的东西,但不是抱怨:)