iOS提供了一种plist格式的文件(属性列表)用于存储轻量级的数据,属性列表是一种XML格式的文件,拓展名为plist。若是对象是NSString、NSDictionary、NSArray、NSData、 NSNumber等类型,就可使用writeToFile:atomically:⽅法 直接将对象写到属性列表文件中该格式保存的数据能够直接使用NSDictionary和NSArray读取 css
(一)、使用NSUserDefault 实现持久化数组
下面来看下 NSUserDefault 本地保存的位置,数据持久化之沙盒目录有说起。Library/Preferences 这个目录下的 plist 文件就是其保存的目录。
NSUserDefault 的用法,主要是保存和读取ui
初始化一个 NSUserDefaultatom
+ (NSUserDefaults *)standardUserDefaults;
url
设置数据的方法spa
- (void)setObject:(nullable id)value forKey:(NSString *)defaultName;
code
- (void)setInteger:(NSInteger)value forKey:(NSString *)defaultName;
对象
- (void)setFloat:(float)value forKey:(NSString *)defaultName;
图片
- (void)setDouble:(double)value forKey:(NSString *)defaultName;
rem
- (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;
使用方法
//1.得到NSUserDefaults文件
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
//2.向文件中写入内容
[userDefaults setObject:@
"AAA"
forKey:@
"a"
];
[userDefaults setBool:YES forKey:@
"sex"
];
[userDefaults setInteger:21 forKey:@
"age"
];
//2.1当即同步
[userDefaults synchronize];
//3.读取文件
NSString *name = [userDefaults objectForKey:@
"a"
];
BOOL sex = [userDefaults boolForKey:@
"sex"
];
NSInteger age = [userDefaults integerForKey:@
"age"
];
// 存储id类型数据
+ (void)setValue:(id)value andKey:(NSString *)key
{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:value forKey:key];
[userDefaults synchronize];
}
// 获取数据
+ (NSString *)getValueByKey:(NSString *)key
{
NSUserDefaults * settings = [NSUserDefaults standardUserDefaults];
NSString *value = [settings objectForKey:key];
return value;
}
注意:
偏好设置是专门用来保存应用程序的配置信息的,通常不要在偏好设置中保存其余数据。
若是没有调用synchronize方法,系统会根据I/O状况不定时刻地保存到文件中。因此若是须要当即写入文件的就必须调用synchronize方法。
偏好设置会将全部数据保存到同一个文件中。即preference目录下的一个以此应用包名来命名的plist文件。
(二)、手动添加plist文件
新建文件-->Resource-->Property List
plist文件的根类型只能是NSArray或NSDictionary
将plist文件中的数据读入对应的根类型
// 一、获取文件所在的路径,Resource:文件名称、Type:文件格式
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"userInfos" ofType:@"plist"];
// 二、从路径中获取对应格式的数据
// 若是Root为NSArray,则使用数组保存
NSArray *infos = [NSArray arrayWithContentsOfFile:filePath];
NSLog(@"%@",infos);
// 若是Root为NSDictionary,则使用字典保存
NSDictionary *infoDic = [NSDictionary dictionaryWithContentsOfFile:filePath];
NSLog(@"%@",infoDic);
(三)、直接讲数据写入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文件的读写效率比较高,因为他的读写须要将全部的数据取出再所有保存,因此只适合小数据。