循环的多个if-else Vs

时间:2012-09-10 04:11:19

标签: iphone objective-c performance

在解析xml文档时,我使用了多个if-else来明智地解析数据标记。我也可以用for循环做同样的事情。但我很担心使用哪个,因为性能会提高。哪个会更快?

//Parsing with If-Else

if(element.name isEqualToString:@"String1") {
object.id = [element.value intValue];
}
if(element.name isEqualToString:@"String2") {
object.name = element.value;
}
if(element.name isEqualToString:@"String3") {
object.address = element.value;
}
.....

// OR Parsing with for loop

for(NSString * str in NSArray) {
[dict setObject:element.value forKey:element.name];// This will add parsing element in dict
}

//Use the dictionary to show data later

2 个答案:

答案 0 :(得分:1)

字典查找可以更快,因为它使用键哈希。也就是说,在尝试优化代码之前,您应始终对代码进行概要分析。

就个人而言,我喜欢字典方法,因为它不那么普通的代码。此外,您可以轻松地将元素名称映射到感兴趣的字典键:

NSDictionary *keySubstitutions = { @"String1" : @"id", @"String2" : @"name", ... };

for(NSXMLElement * element in elements) {
    id key = keySubstitutions[element.name];
    if (key)
        dict[key] = element.value;
    // else the element name is not supported
}

答案 1 :(得分:0)

这实际上是关于表示的问题,因为它是关于代码结构的。具有命名属性的对象强烈建议使用if-elseif结构,并且字典强烈建议循环。

XML(以及所有的亲属)与名称 - 值表示完美配对。标签是名称,标签主体是值。

字典是要走的路,因此循环也是如此。这是NS解析器以及我能想到的任何第三方做出的选择。