Это не ответ на ваш вопрос, а предложение альтернативного подхода, который (на мой взгляд) «чище» в использовании.
Альтернатива использованиюСинглтоном для хранения всего приложения может быть определение класса с помощью методов класса, которые извлекают значения из NSUserDefaults.Этот класс может быть импортирован в заголовок префикса (* .pch), так что вы можете получить к нему доступ из любого другого класса в проекте.
Методы внутри этого класса могут выглядеть следующим образом:
внутри Settings.h :
// for this example I'll use the prefix for a fictional company called SimpleSoft (SS)
extern NSString *kSSUserLoginNameKey;
+ (NSString *)userLoginName;
+ (void)setUserLoginName:(NSString *)userLoginName;
внутри Settings.m :
kSSUserLoginNameKey = @"SSUserLoginNameKey";
+ (NSString *)userLoginName
{
return [[NSUserDefaults standardUserDefaults] valueForKey:kSSUserLoginNameKey];
}
+ (void)setUserLoginName:(NSString *)userLoginName
{
[[NSUserDefaults standardUserDefaults] setValue:userLoginName forKey:kSSUserLoginNameKey];
[[NSUserDefaults standardUserDefaults] synthesize];
}
Конечно, в такой конфигурации NSUserDefaults - это единственный объект, доступ к которому осуществляется через удобный класс.Этот класс действует как оболочка для синглтона NSUserDefaults .Доступ к значениям можно получить следующим образом:
NSString userLoginName = [Settings userLoginName];
[Settings setUserLoginName:@"Bob"];
К другим объектам, таким как массивы, можно получить доступ почти таким же образом.Одна вещь, с которой нужно быть осторожным (почти так же, как с вашим текущим подходом), это быть осторожным, чтобы не получить доступ к классу, подобному этому, из любого другого класса.Компоненты, предназначенные для повторного использования, должны передавать значения, поэтому компоненты приложения не будут слишком тесно связаны с классом настроек.