Почему этот ключ 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 префикс. Точка - это обычный способ разделения компонентов в пространстве имен.

Это просто ключ, это может быть любая строка или объект, но не ноль

Другие вопросы по тегам