iOS之数据持久化

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];

之后还会继续添加并完善其余几种数据持久化方法,敬请期待!

本文属于根据个人理解所写,如有不对之处,还望各位指教!小弟不胜感激!

你可能感兴趣的:(iOS之数据持久化)