属性的存储就是对一些属性的持久化,比如 NSString, NSArry, NSDictionary 等,这些属性值可以直接保存在 NSUserDefault 里面。
一、NSUserDefault 实现持久化
下面来看下 NSUserDefault 本地保存的位置,数据持久化之沙盒目录有提及。Library/Preferences 这个目录下的 plist 文件就是其保存的目录。
NSUserDefault 的用法,主要是保存和读取
初始化一个 NSUserDefault
+ (NSUserDefaults *)standardUserDefaults;
设置数据的方法
- (void)setObject:(nullable id)value forKey:(NSString *)defaultName;
- (void)setInteger:(NSInteger)value forKey:(NSString *)defaultName;
- (void)setFloat:(float)value forKey:(NSString *)defaultName;
- (void)setDouble:(double)value forKey:(NSString *)defaultName;
- (void)setBool:(BOOL)value forKey:(NSString *)defaultName;
- (void)setURL:(nullable NSURL *)url forKey:(NSString *)defaultName NS_AVAILABLE(10_6, 4_0);
读取数据的方法:
- (nullable id)objectForKey:(NSString *)defaultName;
- (nullable NSString *)stringForKey:(NSString *)defaultName;
- (nullable NSArray *)arrayForKey:(NSString *)defaultName;
- (nullable NSDictionary<NSString *, id> *)dictionaryForKey:(NSString *)defaultName;
- (nullable NSData *)dataForKey:(NSString *)defaultName;
- (nullable NSArray<NSString *> *)stringArrayForKey:(NSString *)defaultName;
- (NSInteger)integerForKey:(NSString *)defaultName;
- (float)floatForKey:(NSString *)defaultName;
- (double)doubleForKey:(NSString *)defaultName;
- (BOOL)boolForKey:(NSString *)defaultName;
- (nullable NSURL *)URLForKey:(NSString *)defaultName NS_AVAILABLE(10_6, 4_0);
删除数据的方法:
- (void)removeObjectForKey:(NSString *)defaultName;
保存数据:
/// 如果不手动调用,系统会自动保存,但时间不定
- (BOOL)synchronize;
二、plist实现持久化
由于 NSUserDefault 本质上就是通过 plist 文件来实现属性的持久化。所以,我们可以通过自己创建一个 plist 文件来实现属性的持久化。
NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)
;
NSString *docPath = [path objectAtIndex:0];
NSString *myFile = [docPath stringByAppendingPathComponent:@"test.plist"];
NSMutableDictionary *contentDic;
/// 判断本地是否存在 plist 文件
if ([[NSFileManager defaultManager] fileExistsAtPath:myFile] == NO) {
NSFileManager* fm = [NSFileManager defaultManager];
/// 创建一个文件
[fm createFileAtPath:myFile contents:nil attributes:nil];
contentDic = [[NSMutableDictionary alloc] init];
}
else
{
contentDic = [[NSMutableDictionary alloc] initWithContentsOfFile:myFile];
}
/// 数据的读写操作
[contentDic setObject:@"1234" forKey:@"passWord"];
/// 将修改都的数据保存到 plist 文件中
[contentDic writeToFile:myFile atomically:YES];
三、总结
plist文件的读写效率比较高,由于他的读写需要将所有的数据取出再全部保存,所以只适合小数据。
网友评论