iOS 数据持久化

目录(?)[+]


开发中经常涉及到数据持久化,避免了重复的请求服务器,减少了用户流量的消耗


1.NSUserDefault;

2.NSKeyedArchiver   \    NSKeyedUnarchiver   归档

3. 嵌入式数据库 SQLite3

4.写入磁盘 .沙盒存储


1.NSUserDefault

官方API

NSUserDefaults类提供了便利的方法来访问常见类型如漂浮,双打,整数,布尔和url。一个默认的对象必须是一个属性列表,也就是的一个实例(或集合的组合的实例):NSData,NSString,NSNumber,处理NSDate,NSArray或NSDictionary。如果你想存储其他类型的对象,通常你应该存档NSData它来创建一个实例。更多细节,请参阅偏好和设置编程指南。

自动为每个用户创建一个默认的数据库。NSUserDefaults类目前不支持中偏好。要做到这一点,您必须使用CFPreferences API(参见偏好工具参考)。然而,NSUserDefaults正确读取中偏好,所以您可以安全地混合CFPreferences代码与NSUserDefaults代码

如果您的应用程序支持管理环境中,您可以使用一个NSUserDefaults对象来确定哪些偏好是由管理员用户的利益。管理环境对应计算机实验室或教室管理员或教师可能需要配置系统在一个特定的方式。在这些情况下,管理者可以建立一组默认首选项,迫使那些偏好的用户。如果一个偏好管理通过这种方式,应用程序应该防止用户编辑,偏好通过禁用任何适当的控制。


作为轻量级存储方式,上代码

  1. - (void)viewDidLoad {  
  2.     [super viewDidLoad];  
  3.    
  4.     [self saveData];  
  5.       
  6.     [self readData];  
  7.       
  8. }  
  9.   
  10. - (void)saveData  
  11. {  
  12.     int myInteger = 100;  
  13.     NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];  
  14.     [userDefaults setInteger:myInteger forKey:@"myKey"];  
  15.     //同步存储到磁盘中,但是不是必须的  
  16.     [userDefaults synchronize];  
  17. }  
  18.   
  19.   
  20. - (void)readData  
  21. {  
  22.      NSUserDefaults *userDefaultes = [NSUserDefaults standardUserDefaults];  
  23.     //读取整型int类型的数据  
  24.     NSInteger myInteger = [userDefaultes integerForKey:@"myKey"];  
  25.     NSLog(@"%ld",myInteger);  
  26.       
  27. }  

打印结果:


保存位置:

位于沙盒目录的 Library - Preferences ---  plist 文件中

就在plist里面



2.NSKeyedArchiver   \    NSKeyedUnarchiver   归档

  1. - (void)NSKeyedArchiverData  
  2. {  
  3.     // 测试数据  
  4.     NSString *str1 = @"abc";  
  5.     NSString *str2 = @"123";  
  6.     NSArray *Array = [NSArray arrayWithObjects:str1, str2, nil nil];  
  7.     //Documents目录  
  8.     NSString *Path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];  
  9.     NSString *filePath = [Path stringByAppendingPathComponent:@"test"];  
  10.     /** 
  11.      *  归档 
  12.      */  
  13.     [NSKeyedArchiver archiveRootObject:Array toFile:filePath];  
  14.       
  15.     /** 
  16.      *  解归档 
  17.      */  
  18.     NSArray *dataArray = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];  
  19.     for (NSString *str in dataArray) {  
  20.         NSLog(@"textStr ---- %@",str);  
  21.     }  
  22. }  

输出结果




3. 嵌入式数据库 SQLite3

请参考: 参考博客地址



4.写入磁盘 .沙盒存储

  1. - (void)NSFileManagerSave  
  2. {   //创建一个文件  
  3.     NSFileManager *manager = [NSFileManager defaultManager];  
  4.     NSString *filePath = [self filePath];  
  5.     [manager createFileAtPath:filePath contents:nil attributes:nil];  
  6.     //测试数据  
  7.     UIImage *image = [UIImage imageNamed:@"1.jpg"];  
  8.     NSData *imageData = UIImageJPEGRepresentation(image, 1);  
  9.     //写入文件  
  10.     [imageData writeToFile:filePath atomically:YES];  
  11. }  
  12. - (void)readNSFileManager  
  13. {   //从文件中读取数据  
  14.     NSData *data = [NSData dataWithContentsOfFile:[self filePath]];  
  15.     UIImage *image = [UIImage imageWithData:data];  
  16. }  


测试结果:



其实也可以,在沙盒拼接路径,不用NSFileManager,效果相同

  1. - (NSString *)getPath:(NSString *)fileName  
  2. {  
  3.     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
  4.     NSString *filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:fileName];  
  5.     return filePath;  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值