遍历NSDictionary的键/值,是enumerateKeysAndObjectsUsingBlock比循环键和调用objectForkey更有效:?

Lio*_*Lio 13 iphone performance nsdictionary ios objective-c-blocks

我需要遍历字典的所有键/值对并对这两个字段执行某些操作.我想知道什么是更高效,传统的'foreach key'方法或使用enumerateKeysAndObjectsUsingBlock的块方法:

这里有一个例子:

传统方法(块之前)

for (NSString* key in [self.dictionary allKeys] ) {
    [self processKey:key value: [self.dictionary objectForKey:value ]];
}
Run Code Online (Sandbox Code Playgroud)

阻止方法.

 [self.dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop){
        [self processKey:key value:obj];
    }]; 
Run Code Online (Sandbox Code Playgroud)

我的直觉是使用块遍历键/值对更快,但我不确定,因为我不知道字典和特定块方法是如何实现的.

有什么想法吗?

提前致谢!

Mic*_*ick 12

它们基本相同 - 它们都是同步遍历.但是,以下将允许并发遍历,这将更快:

[self.dictionary enumerateKeysAndObjectsWithOptions:NSEnumerationConcurrent
                              usingBlock:^(id key, id object, BOOL *stop) {

}];
Run Code Online (Sandbox Code Playgroud)


Ben*_*ayo 11

您应该使用基于块的方法.这更快,如此处所示.特别是,它不需要在字典中额外查找以获取值,从而节省了性能.但是,除非在相当大的字典上运行,否则性能提升可以忽略不计.