天天看点

iOS项目本地存储NSUserDefault的改进

通常,一般应用需要保存一定数量的用户信息,记录用户选择的选项,比如保存登录账号密码。在设置页面保存了用户是否开启推送,是否开启推送时震动,播放铃声,有的时候还要对某些数据进行保存,到了别的地方要用。等等诸如此类的情况,一般都是选择比较简单的NSUserDefault来管理。

随着项目的体积增加,功能增多,从一开始几个地方使用。到多个地方使用,甚至有几十处,反正就是有需要的时候就拿来用一下,反正A和B同时管理项目的时候注意保存时存入不同的key值就可以了。

但是这样至少让项目看起来不美观,整理的时候有一种杂乱的感觉,有的同学说,那我用一个管理类统一管理。把setvalueforkey和getvalueforkey写成一个方法,外面统一调用这俩方法进行存取,想查看整个项目有何处使用的时候全局搜这俩方法的使用就行了。当然这也可以,不过还是不够好。我说一下我的解决方法。

思路:我每次进行存取的时候,通过一个方法,在管理类创建一个我要进行存取的属性。然后对该属性进行set和get方法。通过setget方法调用setvalueforkey和getvalueforkey,这样外部每次想要存值得时候,在管理类处通过宏来声明一下就行,在相关页面调用set方法存值,取值就行了。

上代码

1. 在管理类声明一个创建属性的宏

iOS项目本地存储NSUserDefault的改进

这样写,以后我需要创建新的键值对存取的时候,在该类里面通过CREATE_SETGET_UTILS_H 这个方法将想要的格式,属性强弱,名字,写进去就会创建这样一个属性。

2. 在.m文件中

iOS项目本地存储NSUserDefault的改进

首先,比如我在.h内 调用方法CREATE_SETGET_UTILS_H(NSString *, strong, isOpenShake);//推送消息。是否开启震动

就会创建一个属性,相当于写了一个:

@property(nonatomic, strong)NSString *isOpenShake;

写完之后。属性创建就完毕,当外部进行调用的时候,无非就是set方法和get方法,因为我在.m内写了CREATE_SETGET_UTILS_M(NSMutableDictionary *,locateDictinary , LocateDictinary);这个方法,调用的时候就会走它,@synthesize ,告诉编译器我如果没有手动生成set和get方法就让他自己帮我生成。然后我手写set方法和get方法,我只是传入了属性的大写字母,在set和get方法内部调用了nsuserdefault的存储和取值,这样就完成了整个的使用。

.m的宏方法内部2个##的使用是c的拼接作用。1个#是将后面的参数字符串化

整个使用方法:

1.创建属性:

iOS项目本地存储NSUserDefault的改进

2.在.M内调用方法生成setget方法:

iOS项目本地存储NSUserDefault的改进

3.设置页通过开关保存键值对:

iOS项目本地存储NSUserDefault的改进

4.使用处直接取值即可:

iOS项目本地存储NSUserDefault的改进

以上是关于本地存取的一些优化,使用的时候在commonmodel的方法里面 每次需要新加的时候调用一次创建属性的CREATE_SETGET_UTILS_H方法,然后.m实现一次CREATE_SETGET_UTILS_M 外面就可以使用了,这样做好处不用多说,至少看起来规范了,而且多人的时候管理起来也方便一些;

本人创建了一个公众号,里面每天发一些教程进阶知识,有的是本人总结所得,有的是转载大神的文章,大家一起分享看。

iOS项目本地存储NSUserDefault的改进

其他文章请关注个人博客:http://zhangqq166.cn/

继续阅读