所谓的数据持久化、就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称. 数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型、XML、二进制流等。
iOS中我们常用的数据持久化存储方式基本有五种:NSUserDefaults、plist文件、NSKeyedArchiver归档、SQLite 以及CoreData。其中对于少量的数据我们可以采用NSUserDefaults、plist文件、NSKeyedArchiver归档 这三种方法、而对于大量数据的存储可以使用SQLite 或者CoreData、当然也可使用FMDB。
既然我们要存储一些内容、就需要知道怎么去存储、以及存好后又怎样去拿出来使用。今天来说一下关于NSUserDefaults的知识。
NSUserDefaults又可称为属性设置、它是一个单例。
它支持的数据类型有NSString、 NSNumber、NSDate、 NSArray、NSDictionary、BOOL、NSInteger、NSFloat等系统定义的数据类型,如果要存放自定义的对象(如自定义的类对象),则必须将其转换成NSData存储。
对于NSUserDefaults、我们在存储数据时候使用set...forKey...的方法。
NSUserDefaults *myDefaults = [NSUserDefaults standardUserDefaults];
// 向NSUserDefaults中添加内容
[myDefaults setObject:@"字符串、数组、字典等" forKey:@"数据类型"];
[myDefaults setBool:YES forKey:@"Bool类型"];
[myDefaults setInteger:100 forKey:@"number"];
当然、这个时候我们还需对内容进行“synchronize”。如果没有调用synchronize方法,系统会根据I/O情况不定时刻地保存到文件中。所以如果需要立即写入文件的就必须调用synchronize方法。
[myDefaults synchronize];
当我们需要取出存储的内容时候就对应的用objectForKey、boolForKey、integerForKey等方法。
// 获取存储的内容
NSString *string = [myDefaults objectForKey:@"数据类型"];
BOOL isBool = [myDefaults boolForKey:@"Bool类型"];
NSInteger number = [myDefaults integerForKey:@"number"];
对于删除数据、使用方法removeObjectForKey来操作。
[myDefaults removeObjectForKey:@"Bool类型"];
[myDefaults synchronize];
综上所述、对于NSUserDefaults、我们需要掌握它的基本语法功能、存储和删除。另外、需要特别注意的就是一定不要忘记对他进行同步synchronize。