背景
当我们用NSUserDefaults 存储数据时,对单例对象给成员变量复制时,会重写set,get方法。重复代码多。
怎样动态添加属性并自动添加到NSUserDefaults 里。
原理
通过runtime 动态获得到成员变量名称,并通过@dynamic 手动添加set,get方法,并自动映射。实现自动保存NSUserDefaults里。
代码使用
1、XPPreferences 文件夹直接拖到工程中。
2、子类继承XPPreferences。
3、.h添加属性
@property (nonatomic, assign) BOOL isLogin;
@property (nonatomic, assign) NSString *appkey;
@property (nonatomic, assign) NSInteger pressCount;
@property (nonatomic, assign) float user_id;
4、.m添加@dynamic
@dynamic isLogin;
@dynamic appkey;
@dynamic pressCount;
@dynamic user_id;
5、初始化默认值(也可以不设置)
- (instancetype)init
{
if (self = [super init]) {
NSDictionary *registrationDictionary = @{
@"isLogin" :@NO,
@"appkey" :@"",
@"pressCount" :@8,
@"user_id" : @1
};
[[NSUserDefaults standardUserDefaults] registerDefaults:registrationDictionary];
}
return self;
}
6、项目中直接可以用了
[Preferences sharedInstance].appkey = @"我是appkey";
7、注意事项
a、成员变量用assign 修饰
@property (nonatomic, assign) NSString *appkey;
b、每个变量要写@dynamic
8、GitHub demo https://github.com/tiantianios/XPPreferences.git
有问题留言或者给我发邮件1269456913@qq.com