【问题标题】:Most Efficient Alternative Method of Storing Settings for iPhone Apps为 iPhone 应用程序存储设置的最有效替代方法
【发布时间】:2012-04-06 15:57:39
【问题描述】:
我没有使用设置包来存储我的应用程序的设置,因为我更喜欢允许用户访问应用程序中的设置(它们可能会经常更改)。我确实意识到两者都可以选择,但现在,我正在尝试找到在应用程序中存储设置的最佳位置。
我有很多设置(根据我的阅读,对于 NSUserDefaults 来说可能太多了),我正在考虑的两个主要选项是:
1) 将设置存储在 plist 中的字典中,将设置加载到应用程序委托中的 NSDictionary 属性中并通过 sharedDelegate 访问它们
2) 将设置存储在 Core Data 实体中(设置实体上的 1 行),将设置加载到应用委托中的 Settings 对象中并通过 sharedDelegate 访问它们
在这两种方法中,哪一种是最佳方法,性能方面?
【问题讨论】:
标签:
iphone
optimization
core-data
settings
settings.bundle
【解决方案1】:
只需使用 NSUserDefaults,这就是它的用途。为什么你觉得你有太多的东西?
此外,如果您决定稍后使用设置包,则无论如何您都需要使用 NSUserDefaults。
【解决方案2】:
您应该只使用 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
如果您有任何疑问,请留下 cmets。我很乐意帮助你。
更新
是的,您将通过应用程序委托访问。甚至您可以将其创建为单例类实例。
这种方法使用 OOPS 基础,所以我相信遵循这种模式是击球手。