我的应用程序使用 [NSUserDefaults standardUserDefaults] 作为快速而肮脏的数据库来存储有关用户和应用程序本身的状态。NSUserDefaults 的问题在于,它的灵活性允许下线出现大混乱,例如,当不同的文件都以自己的方式设置和读取字典中的不同键时。您无法执行规则,您可以搞砸密钥名称等。
我为 NSUserDefaults 编写了一个简单的单例“管理器样式”包装器,它在使用时都负责设置默认值,隐藏用于获取值的键的名称并封装一些额外的逻辑,例如编码到 NSData,在存储和从存储中检索对象。
在这一点上,它们是由读取/设置访问器支持的属性,但有些东西让我觉得不对劲,我想知道是否有更优雅的方式来实现相同的结果。有相当多的样板文件,语法最终有点令人不快。给你举个例子:
。H:
@interface UserDefaultsManager: NSObject
+ (UserDefaultsManager *)sharedInstance;
@property (nonatomic, assign) NSInteger somethingImTracking;
@end
和.m:
NSString * const kSomethingImTracking= @"SomethingImTracking";
@implementation UserDefaultsManager
[...]
- (NSInteger)somethingImTracking
{
return [[[NSUserDefaults standardUserDefaults] objectForKey:kSomethingImTracking] intValue];
}
- (void)setSomethingImTracking:(NSInteger)somethingImTracking
{
[[NSUserDefaults standardUserDefaults] setInteger:somethingImTracking forKey:kSomethingImTracking];
}
并访问:
NSInteger foo = [UserDefaultsManager sharedInstance].somethingImTracking;