Изменение возражает в NSUserDefaults, не создавая и сбрасывая копии

Я не думаю, что существует проблема с Вашим подходом, если Вы будете всегда использовать результат (так как Ваш набор результатов не является большим, это не использует много памяти. Между прочим, если Вы сделаете это и никогда не будете использовать результат, то он наложит потерю производительности). Так, да, это - корректный способ сделать это.

6
задан Kornel 14 August 2009 в 13:07
поделиться

1 ответ

Обычно я создаю собственный класс для хранения всех предпочтений моего приложения. Этот класс может загружать изменяемые копии userDefaults один раз при запуске программы, а затем обрабатывать все инкрементные сохранения по пути:

MyPreferences.h

@interface MyPreferences
{
   NSMutableDictionary allPrefs;
}
@property (readonly) NSMutableDictionary * allPrefs;
- (void)load;
- (void)save;
@end

MyPreferences.m

@implementation MyPreferences
@synthesize allPrefs;

- (id)init
{
    if ((self = [super init]) == nil) { return nil; }
    allPrefs = [[NSMutableDictionary alloc] initWithCapacity:0];
    return self;
}

- (void)dealloc
{
    [allPrefs release];
    [super dealloc];
}

- (void)load
{
    // load all mutable copies here
    [allPrefs setObject:[[defaults objectForKey:@"foo"] mutableCopy]
                 forKey:@"foo"];
    // ...
}

- (void)save
{
    [defaults setObject:allPrefs forKey:@"app_preferences"];
}

@end

Я создаю экземпляр этого класса в моем делегате приложения, а затем вызовите [myPrefs load] при запуске моего приложения. Любые настройки, измененные во время работы программы, можно изменить с помощью myPrefs , а затем сохранить, вызвав [myPrefs save] по желанию:

MyPreferences * myPrefs = [myApplication myPrefs];
[myPrefs setObject:bar forKeyPath:@"allPrefs.foo.bar"];
[myPrefs save];

В качестве дополнительного бонуса вы можете структурировать MyPreferences классом, как вам нравится, привнося преимущества объектно-ориентированного программирования для всего набора настроек. Я показал здесь простой способ, просто используя изменяемый словарь,

5
ответ дан 17 December 2019 в 04:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: