存储iPhone应用程序设置的最有效替代方法

时间:2012-03-22 04:16:55

标签: iphone optimization core-data settings settings.bundle

我没有使用“设置”包来存储我的应用程序的设置,因为我更喜欢允许用户访问应用程序中的设置(它们可能会经常更改)。我确实知道可以选择同时执行这两项操作,但是现在,我正在尝试找到在应用程序中存储设置的最佳位置。

我有很多设置(根据我的阅读,NSUserDefaults可能太多),我正在考虑的两个主要选项是: 1)将设置存储在plist中的字典中,将设置加载到app delegate中的NSDictionary属性中,并通过sharedDelegate访问它们 2)将设置存储在Core Data实体中(Settings实体上的1行),将设置加载到app delegate中的Settings对象并通过sharedDelegate访问它们

在这两个中,这将是最佳方法,性能明智吗?

2 个答案:

答案 0 :(得分:3)

只需使用NSUserDefaults,就是它的用途。为什么你觉得你有太多的东西?

此外,如果您决定稍后使用设置包,则无论如何都需要使用NSUserDefault。

答案 1 :(得分:1)

您应该只使用NSUserDefaults。如果您认为有很多NSUserDefaults我建议您创建1个模型类并继续使用它。创建一个模型类并将您的设置作为属性并创建该类的对象并将其保存到NSUserDefaults对您来说很容易,因为它只是一次性实现。

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

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

// Implementaiton

@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

如果您有任何疑问,请留言。我很乐意帮助你。

<强>更新 是的,您可以通过申请代表访问。或者甚至可以将其创建为单例类实例。 这种方法正在使用OOPS基金,因此我认为遵循这种模式更为重要。