数据本地存储是指将数据写到本地的文件中,即使手机重启了数据也不会丢失,数据的本地存储有很多种方式,但是比较有代表性、也是最常用的方式有:
1、属性文件
2、NSUserDefaults
3、对象归档
4、关系数据库SQLite3
5、core data
数据的本地存储的基础是沙盒机制,如果不了解这个机制的话,见请先看了解一下沙盒机制(见文博文“iOS沙盒机制”)。
属性列表:
使用方法:
1、在工程的Supporting Files下新建属性列表文件(data.plist);
2、写数据到属性文件:
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc error:(NSError **)error;
将数据写带属性文件中去。
3、将属性文件的数据读取出来:
- (instancetype)initWithContentsOfFile:(NSString *)path usedEncoding:(NSStringEncoding *)enc error:(NSError **)error,
将数据读取出来。
e.g:
//获取属性列表文件的路径:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *strPaths = [paths objectAtIndex:0];
NSString *plistPath = [strPaths stringByAppendingPathComponent:@"data.plist"];
NSString *strPaths = [paths objectAtIndex:0];
NSString *plistPath = [strPaths stringByAppendingPathComponent:@"data.plist"];
//将数据到属性文件
NSString *data = @"hi man";
[data writeToFile:plistPath atomically:YES encoding:NSUTF8StringEncoding error:nil];
//从属性文件读取数据
NSStringEncoding encode = NSUTF8StringEncoding;
NSString *strData = [[NSString alloc] initWithContentsOfFile:plistPath usedEncoding:&encode error:nil];
从上面的例子可以看出,并不是所有的数据类型都能存放到属性列表中的,只有改类具有类似writeToFile:atomically这样的api才行( NSArray, NSDictionary, NSData, NSString, NSnumber, NSDate), 像自定义类型的数据属性列表就无能为力了。
注意:属性文档的数据是全部加载到内存的,不管你哪怕你更改了一个字节的数据也必须将所有数据全部重新写入文件!