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は、将来変更がはるかに簡単になるため、お勧めします。2つのシナリオを紹介します。

問題1:その辞書を使用して別の操作を実行したい。

//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]の実行に時間がかかる場合はどうなりますか?突然、1回ではなく2回実行します。ここで、返されたディクショナリポインターを保存して、1回だけ実行することができます。

問題2:将来、突然別の辞書にアクセスしたい場合はどうなりますか?上記のオプションを使用すると、辞書に何度アクセスしたかに関係なく、オプションBのコードを1行変更するだけで済みます。オプションBでは、myDictionaryの値を変更するだけです。オプションAでは、一連のコード行を変更する必要があります。

于 2012-08-30T19:03:48.637 に答える