1

次の 2 つのケースで速度に違いはありますか。

A:

userName=[[NSUserDefaults standardUserDefaults] objectForKey:@"userName"];
userEmail=[[NSUserDefaults standardUserDefaults] objectForKey:@"userEmail"];
userId=[[[NSUserDefaults standardUserDefaults] objectForKey:@"userId"] intValue];

B:

userDictionary=[[NSUserDefaults standardUserDefaults] objectForKey:@"userDictionary"];
userName=[userDictionary objectForKey:@"name"];
userEmail=...etc...

速度の違いは非常に小さいかもしれませんが、技術的には、パフォーマンスの違いはありますか?

4

2 に答える 2

4

Cが最速です。

C:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
userName=[defaults objectForKey:@"userName"];
userEmail=[defaults objectForKey:@"userEmail"];
userId=[[defaults objectForKey:@"userId"] intValue];

結果をローカルにキャッシュして再利用できる場合は、同じメソッドを何度も呼び出す意味はありません。メソッドの呼び出しは、ローカル変数にアクセスするよりも常に遅くなります。

于 2012-04-06T18:25:45.897 に答える
1

技術的には、はい。しかし、どちらが速いかを推測するのはかなり賢明ではありません。最初のパスの推測では、ハッシュテーブルで4回ではなく3回のルックアップしか実行しないため、Aの方が高速である可能性があります。しかし、おそらくロックを使用してそれ自体をスレッドセーフにし、おそらくそのオーバーヘッドはBを高速化+[NSUserDefaults standardUserDefaults]するのに十分です。ボーナスとして、一方はiOSのあるバージョンではこれより速く、もう一方は別のバージョンではより速くなる可能性があります。

違いは予測不可能で、信じられないほど無視できます。コードが単純になる方を使用してください。

于 2012-04-06T18:25:32.883 に答える