Есть ли разница в скорости между следующими двумя случаями:NSUserDefaults сравнение производительности
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...
Несмотря на различия в скорости может быть крайне небольшим, технически, есть ли различия в производительности?
Что показали ваши тесты производительности? (Ответ, кстати, обычно да, но такого требования нет. Компилятор может на законных основаниях оптимизировать его, если он захочет. Только тесты скажут вам разницу.) –
Как выполнить тесты производительности? (Кроме того, я хотел знать «почему», а не просто «да» или «нет», на что я не могу ответить) – Snowman
Поместив петлю и запустив ее миллион раз или так, и запустив ее. Что касается «почему», первый запрос метода называется много раз, что более дорого, чем не вызов этого метода. Компилятору разрешено оптимизировать это. Clang не может реально оптимизировать его, потому что он не знает, что вы не заменили 'standardUserDefaults' методом с побочными эффектами во время выполнения. Поэтому на практике это невозможно оптимизировать, и вы должны делать звонки. Но это, как правило, неправильный подход к вопросам производительности. Всегда начинайте с тестов. –