Почему этот ключ NSUserDefaults содержит точку?
Я смотрю урок Standford CS193P, в частности лекцию № 7. У меня есть некоторые сомнения по поводу NSUserDefaults
, Это часть кода:
#define FAVORITES_KEY @"CalculatorGraphViewController.Favorites"
- (IBAction)addToFavorites:(id)sender
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *favorites = [[defaults objectForKey:FAVORITES_KEY] mutableCopy];
if (!favorites) favorites = [NSMutableArray array];
[favorites addObject:self.calculatorProgram];
[defaults setObject:favorites forKey:FAVORITES_KEY];
[defaults synchronize];
}
Я прочитал документацию о NSUserDefaults
, но я не понимаю этот код в частности [[defaults objectForKey:FAVORITES_KEY] mutableCopy]
, FAVORITES_KEY
является @"CalculatorGraphViewController.Favorites"
,
Мой вопрос, почему я должен использовать CalculatorGraphViewController.Favorites
? Я не понимаю точку! Мне кажется, что структура getter или setter, но Favorites имеет заглавную букву, и тогда CalculatorGraphViewController.Foving не имеет смысла.
Не могли бы вы мне помочь, пожалуйста?
3 ответа
Вы можете думать об этом как о NSDictionary, и ключ, который вы предоставляете, предназначен только для вашей собственной ссылки. Это для вас, чтобы получить значение позже. Вы можете назвать это строкой, такой как @"CalculatorGraphViewController.Foving" или любой другой строкой, которая вам нравится. Я полагаю, они называют это так, просто чтобы определить, что это значение для избранного, записанного в CalculatorGraphViewController.
Как уже отмечали другие, ключ является произвольной строкой. Суть в том, что может быть много частей вашего приложения, записывающих значения по умолчанию. Если вы выбрали что-то действительно простое в качестве ключа, скажем "избранное", вполне может случиться, что обе части вашего приложения будут пытаться использовать один и тот же ключ для чего-то другого. (Скажем, для любимых артистов и любимых песен.)
Это распространенная проблема в программировании, и обычно она решается путем введения пространства имен или какого-либо префикса, который делает столкновения менее вероятными. Вы можете часто видеть пространства имен в классах Java, что-то вроде com.someguy.AppName.SomeClassName
, Или даже в доменных именах - как developer.facebook.com
а также developer.apple.com
, Оба используют термин "разработчик", но оба отличаются в пространстве имен (com.facebook
против com.apple
).
Вы можете использовать то же решение в своем случае и ввести пространство имен в свой ключ по умолчанию. Логическим выбором для пространства имен является имя класса, потому что у вас вряд ли будет два класса с одинаковым именем. Таким образом, вы получите CalculatorGraphViewController
префикс. Точка - это обычный способ разделения компонентов в пространстве имен.
Это просто ключ, это может быть любая строка или объект, но не ноль