1、iOS数据持久化之——NSUserDefaults
NSUserDefaults适合存储轻量级的本地数据,比如要保存一个登录界面的数据:用户名、密码之类的,个人觉得使用NSUserDefaults是首选。下次再登录的时候就可以直接从NSUserDefaults里面读取上次登录的信息。
NSUserDefaults支持的数据格式有:NSNumber(Integer、Float、Double),NSString,NSDate,NSArray,NSDictionary,BOOL类型
另外,NSUserDefaults不能存储可变(mutable)类型,只能存储不可变类型
例:NSUserDefaults的存储与读取:
//存储时
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
//存储时,除NSNumber类型使用对应的类型意外,其他的都是使用setObject:forKey:
//存储Integer、Float、Double类型
[userDefaults setInteger:myInteger forKey:@"myInteger"];
[userDefaults setFloat:myFloat forKey:@"myFloat"];
[userDefaultssetDouble:myFloatforKey:@"myDouble"];
//存储NSString类型
[userDefaults setDouble:myDouble forKey:@"myDouble"];
[userDefaults synchronize];//立即写入
如果没有调用synchronize方法,系统会根据I/O情况不定时刻地保存到文件中。所以如果需要立即写入文件的就必须调用synchronize方法。
//读取时
//读取Integer、Float、Double类型
NSInteger myInteger = [userDefaultes integerForKey:@"myInteger"];
floatmyFloat = [userDefaultes floatForKey:@"myFloat"];
doublemyDouble = [userDefaultes doubleForKey:@"myDouble"];;
//读取NSString类型的数据
NSString *myString = [userDefaultes stringForKey:@"myString"];
//读取NSDate日期类型的数据
NSDate *myDate = [userDefaultes valueForKey:@"myDate"];
看完以上的介绍你可能会问一个问题:NSUserDefautls将数据存储在了什么地方?有没有显示的指定路径?
其实它存储在应用程序内置的一个plist文件里,这个可以根据路径看到。
沙盒目录中的这个下面有/Library/Prefereces,里面有个plist文件,存储的就是你的userDefaults
想要删掉的话,用removeObjectForKey或者删掉沙盒,也就是你的应用程序然后重新安装。
2、iOS数据持久化之——plist文件
plist是一种文件格式,其内容规则是xml文件,后缀为.plist;因此我们更习惯于称它为plist文件,在iOS开发中,这种文件常用来保存一些简单的配置数据。例如:项目中的info.plist。
以下简单介绍一下plist的简单应用:
1、在Xcode中创建一个plist文件
2、在plist写入一些数据,如图:
plist文件中添加的数据3、通过代码我们可以操作这些数据
//获取myInfo文件地址
NSString * path = [[NSBundle mainBundle]pathForResource:@"myInfo"ofType:@"plist"];
NSMutableDictionary * dic =[NSMutableDictionary dictionaryWithContentsOfFile:path];
NSLog(@"%@",dic);
plist文件适用于:
这种方式添加的plist文件,我们只能在xcode中配置好,然后再程序中读取使用,但是不能在程序中修改这些数据,可以应用于一些固定的数据的存储,例如地图的属性,省市县列表等。
另外我们还能在沙盒目录中创建和使用plist文件
我们还可以通过代码在沙盒中创建我们自己的plist文件,进行数据的存储。同时可以支持add,delete,replace,find等操作。
//获取沙盒目录
NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString *plistPath1 = [paths objectAtIndex:0];
//获取文件名
NSString *filename=[plistPath1 stringByAppendingPathComponent:@"my.plist"];
NSDictionary * dic = @{@"my":@"haha"};
[dic writeToFile:filename atomically:YES];
//取数据
NSDictionary * getDic = [NSDictionary dictionaryWithContentsOfFile:filename];
之后还会继续添加并完善其余几种数据持久化方法,敬请期待!
本文属于根据个人理解所写,如有不对之处,还望各位指教!小弟不胜感激!
网友评论