3

我通常使用选项 B,因为它允许我在需要时对字典进行一些调试(如选项 C 所示)。在我看来,它看起来也更干净。这可能不是问题,但我想知道选项 B 或 C 是​​否使用更多内存,或者在 iOS 编程中执行此操作时是否需要考虑其他事项。顺便说一句,我正在使用ARC。

与选项 B 或 C 相比,使用选项 A 是否有优势?

// OPTION A
NSString *someString = [[self grabDictionaryFromDB] objectForKey:@"someField"];

// OPTION B
NSDictionary *dbRow = [self grabDictionaryFromDB]; // dbRow ONLY gets used in the next line
NSString *someString = [dbRow objectForKey:@"someField"];

// OPTION C
NSDictionary *dbRow = [self grabDictionaryFromDB]; // dbRow ONLY gets used in the next two lines
NSLog(@"Row: %@", dbRow);
NSString *someString = [dbRow objectForKey:@"someField"];
4

2 回答 2

2

选项 A 和 B 可能会被编译器优化为完全相同的输出,因此使用选项 B 获得的唯一好处是可读性。选项 C 可能需要额外的存储指令和来自 ARC 的一对[retain]/ [release],但与选项 A 或 B 相比,您不会注意到影响。

于 2012-08-30T18:16:53.347 回答
0

我建议选项 B,因为它在将来更容易修改。让我介绍两个场景:

问题一:您想使用该字典执行另一个操作。

//Option A version
NSString *someString = [[self grabDictionaryFromDB] objectForKey:@"someField"];
NSString *someOtherString = [[self grabDictionaryFromDB] objectForKey:@"someOtherField"];

//Option B version
NSDictionary *myDictionary = [self grabDictionaryFromDB];
NSString *someString = [myDictionary objectForKey:@"someField"];
NSString *someOtherString = [myDictionary objectForKey:@"someOtherField"];

如果 [self grabDictionaryFromDB] 执行时间过长怎么办?突然间,您执行了两次而不是一次,因为您可以保存返回的字典指针并且只执行一次。

问题二:如果你将来突然想访问不同的字典怎么办?使用上述选项,您只需更改选项 B 中的一行代码,无论您访问字典多少次。在选项 B 中,您只需更改 myDictionary 的值。在选项 A 中,您将不得不更改一堆代码行。

于 2012-08-30T19:03:48.637 回答