1

以下两种情况是否存在速度差异:

A:

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

乙:

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

从技术上讲,是的。但是推测哪个更快是相当不明智的。第一次猜测可能是A更快,因为它只在哈希表中进行 3 次查找,而不是 4 次。但也许+[NSUserDefaults standardUserDefaults]使用锁来使自己成为线程安全的,也许这种开销足以使B更快。作为奖励,一个版本的 iOS 可能会更快,而另一个版本的 iOS 可能会更快。

差异是不可预测的,并且可以忽略不计。使用使代码更简单的那个。

于 2012-04-06T18:25:32.883 回答