字典vs束如果"如果"用"返回"

时间:2015-11-19 08:34:16

标签: ios objective-c nsdictionary

我对其中一个iOS应用中使用的两种方法感到困惑。让我们说我可以创建一个词典:

NSDictionary *numberDict = @{
    @"First" : [NSNumber numberWithInt:1],
    @"Second" : [NSNumber numberWithInt:2]};

稍后,

NSNumber *n = [numberDict objectForKey:@"First"]);

或者只写一个返回数字的方法:

-(NSNumber *) numberMethod: (NSString *)number{
if([number isEqualToString @"First"]) return [NSNumber numberWithInt:1];
if([number isEqualToString @"Second"]) return [NSNumber numberWithInt 2];
}

然后,

NSNumber *n = [self numberMethod: @"First"];

更推荐哪种方式(优点与缺点),哪一种显示更好的性能,然后有两个像我的例子一样?

4 个答案:

答案 0 :(得分:4)

访问字典的元素应该是O(1)操作。另一方面,if条件对于相同的操作花费相当多的时间。因此,考虑到代码的速度和整洁性,NSDictionary更好。另一个优点是,您可以根据需要向字典中添加任意数量的元素,因此它更具动态性(例如,在运行时将元素加载到字典中的情况,例如Web服务响应)。这将使代码更加灵活。

另一方面,考虑到内存,与方法相比,NSDictionary对象显然需要更多内存,这是我在方法中看到的唯一优势。

如果你问我会做什么,我当然会选择NSDictionary

答案 1 :(得分:1)

这取决于你想要实现的目标。但是如果你提到的话,看起来你想拥有键值对,在这种情况下我会使用语言提供的东西 - 字典。 NSDictionary具有O(1)查找时间,并且针对您想要做的事情进行了优化,请记住您可以使用Objective-C 2.0方法创建字典:

NSDictionary *numberDict = @{@"First" : @1, @"Second" : @2 };

以及访问值:

numberDict[@"First"]; // returns @1

答案 2 :(得分:0)

我想:

NSDictionary占用的内存比method多。因为字典是存储的。如果有太多大物件,那就不好了。

NSDictionary的运行速度比method快。因为它已经加载并使用hashtag来访问值。

我会参考NSDictionary方法,因为它更简单。

答案 3 :(得分:0)

更推荐使用NSDictionary / NSMutableDictionary

NSDictionary *numberDict = @{
    @"First" : @1,
    @"Second": @2
};

NSNumber *n = numberDict[@"First"];
  • 如果您使用此方法,那么您最终会编写大量if语句,并且每次如果要添加新值,都必须再次编写整个if语句。而NSDictionary的简写符号非常简洁,如上所示。
  • 在调用方法时,您必须指定类对象,即self,并且必须编写长方法名称。在从NSDictionary访问值时,您可以利用下标表示法。
  • 您可以枚举NSDictionary
  • 您可以利用为NSDicationary编写的其他方法,例如allKeysallValueswriteToFileinitFromFilecountinitWithDictionary,列表继续。
  • 最后,如果您使用NSMutableDictionary,那么您可以在代码中稍后修改值。

方法的唯一优势是它们不会占用任何记忆。