Самый эффективный альтернативный способ хранения настроек для приложений iPhone - PullRequest
0 голосов
/ 22 марта 2012

Я не использую пакет «Настройки» для хранения настроек своего приложения, так как я предпочитаю разрешать пользователю доступ к настройкам в приложении (они могут изменяться довольно часто). Я понимаю, что есть возможность сделать и то и другое, но сейчас я пытаюсь найти наиболее оптимальное место для хранения настроек в приложении.

У меня достаточно настроек (из того, что я прочитал, вероятно, слишком много для NSUserDefaults), и я рассматриваю два основных варианта: 1) сохранение настроек в словаре в plist, загрузка настроек в свойство NSDictionary в делегате приложения и доступ к ним через sharedDelegate 2) сохранение настроек в сущности базовых данных (1 строка в сущности настроек), загрузка настроек в объект настроек в делегате приложения и доступ к ним через sharedDelegate

Из этих двух, какой будет оптимальный метод с точки зрения производительности?

Ответы [ 2 ]

3 голосов
/ 22 марта 2012

Просто используйте NSUserDefaults, вот для чего он нужен. Почему вы чувствуете, что у вас их слишком много?

Также, если вы решите использовать пакет настроек позже, вам все равно придется использовать NSUserDefaults.

1 голос
/ 22 марта 2012

Вы должны использовать только NSUserDefaults.Если вы думаете, что есть много NSUserDefaults, я предлагаю вам создать 1 класс модели и пойти с ним.Создайте один класс модели и настройте его как свойства, а также создайте объект этого класса и сохраните его в NSUserDefaults, что будет легко для вас, поскольку это только одноразовая реализация.

@interface SettingsModelClass : NSObject 
{
    NSString *strSetting1;
    BOOL boolSetting2;
}

@property (nonatomic,retain) NSString *strSetting1;
@property (nonatomic,assign) BOOL boolSetting2;

// Реализация

@implementation SettingsModelClass

@synthesize strSetting1, boolSetting2;

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

- (void)encodeWithCoder:(NSCoder *)encoder
{
    //Encode properties, other class variables, etc
    [encoder encodeObject:self.strSetting1 forKey:@"StringSetting"];    
    [encoder encodeBool:self.boolSetting2 forKey:@"BoolSetting"];
}

- (id)initWithCoder:(NSCoder *)decoder
{
    self = [super init];
    if( self != nil )
    {
        //decode properties, other class vars
        self.strSetting1 = [decoder decodeObjectForKey:@"StringSetting"]; 
        self.boolSetting2 = [decoder decodeBoolForKey:@"BoolSetting"]; 
    }
    return self;
}

@end

Пожалуйста, оставляйте комментарии, если у вас есть какие-либо сомнения.Я хотел бы помочь вам.

Обновление Да, вы получите доступ через делегата приложения.Или даже вы можете создать его как экземпляр класса singleton.Этот подход использует OOPS fundas, поэтому я считаю, что нужно следовать этой схеме, как мне кажется.

...