iOS开发之数据存储
来源:互联网 发布:金融it 编辑:程序博客网 时间:2024/05/23 02:05
一、iOS应用数据存储的常用方式
- XML属性列表(plist)归档- Preference(偏好设置) 本质还是通过“plist”来存储数据, 但是使用更简单(无需关注文件、文件夹路径和名称)- NSKeyedArchiver归档(NSCoding) 把任何对象, 直接保存为文件的方式。- SQLite3 当非常大量的数据存储时使用- Core Data 就是对SQLite的封装
二、获取路径
- 获取bundle路径 NSString *path = [NSBundle mainBundle].bundlePath; -获取沙盒路径 NSString *home = NSHomeDirectory();
三、沙盒路径目录结构
-Document 保存应用运行时生成的需要持久化的数据 -library Caches 保存应用运行时生成的需要持久化的数据 Preferences 保存应用的所有偏好设置 -temp 保存应用运行时所需的临时数据
四、利用沙盒根目录拼接”Documents”字符串
方式一:(拼接字符串)
NSString *home =NSHomeDirectory();NSString *documents = [home stringByAppendingString:@“/Documents"];
方式二:(作为路径的一部分)
NSString *home =NSHomeDirectory();NSString*documents =[homestringByAppendingPathComponent:@"Documents"];
方式三:()
参数1:目标文件,参数二:作用域, 参数三:是否展开波浪线[NSSearchPathForDirectoriesInDomains(<#NSSearchPathDirectory directory#>, <#NSSearchPathDomainMask domainMask#>, <#BOOL expandTilde#>)]NSString * documents = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
五、获取caches文件夹路径
//获取caches文件夹
NSString * cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, NO) lastObject];
六、获取偏好设置文件夹路径
NSTemporaryDirectory()
七、plist数据的存储与读取
//数据存储
NSArray * names = [NSArray arrayWithObjects:@"Bob",@"王宝", @"球童",@"Jack",nil]; // 1.获取路径 NSString * path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; // 2.拼接文件名NSString * filePath = [path stringByAppendingPathComponent:@"names.plist"];// 3. 存储// atomically 是否允许原子写入[names writeToFile:filePath atomically:YES];NSLog(@"%@",filePath);
读取数据
//1.获取数据路径NSString * path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];//2.拼接文件路径NSString * filePath = [path stringByAppendingPathComponent:@"names.plist"];//3.读取数据NSArray * names = [NSArray arrayWithContentsOfFile:filePath];NSLog(@"%@",names);
八、plist数据的存储与读取
//偏好设置存储
//1.获取NSUserDefaults对象NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];//2.存储数据[userDefaults setObject:@"Jack" forKey:@"name"];[userDefaults setInteger:23 forKey:@"age"];[userDefaults setBool:YES forKey:@"sex"];//3.立即存储[userDefaults synchronize];NSLog(@"%@",NSHomeDirectory());
//读取偏好设置
//1.获取NSUserDefaults对象NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];//2.读取数据NSString * name = [userDefaults objectForKey:@"name"];NSInteger age = [userDefaults integerForKey:@"age"];BOOL sex = [userDefaults boolForKey:@"sex"];NSLog(@"name =%@ age = %ld sex = %d",name,age,sex);
九、归档与反归档
“归档”:是一种可以把任何对象,直接保存为文件的方式。
- 如果对象是NSString、NSDictionary、NSArray、NSData、NSNumber等类型,可以直接用NSKeyedArchiver进行归档和恢复- 不是所有的对象都可以直接用这种方法进行归档,只有遵守了NSCoding协议的对象才可以- NSCoding协议有2个方法:- encodeWithCoder: 每次归档对象时,都会调用这个方法。一般在这个方法里面指定如何归档对象中的每个实例变量,可以使用encodeObject:forKey:方法归档实例变量- initWithCoder: 每次从文件中恢复(解码)对象时,都会调用这个方法。一般在这个方法里面指定如何解码文件中的数据为对象的实例变量,可以使用decodeObject:forKey方法解码实例变量
CZPerson.h
[x] 注意:改方法要遵守NSCodiing协议
#import <Foundation/Foundation.h>@interface CZPerson : NSObject<NSCoding@property (nonatomic,copy) NSString * name;@property (nonatomic,copy) NSString * phone;@end
CZPerson.m
[x] 注意:实现NSCodiing协议的方法*
#import "CZPerson.h"@implementation CZPerson//确定要存储对象的哪些属性- (void)encodeWithCoder:(NSCoder *)aCoder{ [aCoder encodeObject:self.name forKey:@"name"]; [aCoder encodeObject:self.phone forKey:@"phone"];}//确定要读取对象的哪些属性- (id)initWithCoder:(NSCoder *)aDecoder{ if(self = [super init]) { self.name = [aDecoder decodeObjectForKey:@"name"]; self.phone = [aDecoder decodeObjectForKey:@"phone"]; } return self;}@end
ViewController.m
#import "ViewController.h"#import "CZPerson.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. //反归档 (反序列化) //1.获取路径 NSString * path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; //2.拼接文件名 NSString * filePath = [path stringByAppendingPathComponent:@"person"]; //3.通过反归档读取数据 CZPerson * p = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; NSLog(@"name =%@ phone = %@",p.name,p.phone);// [self test01];}//归档 (序列化)- (void) test01{ //创建person对象 CZPerson * person = [[CZPerson alloc] init]; //赋值 person.name = @"JackMeng"; person.phone = @"186000001"; //获取路径 NSString * path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; //拼接文件名 NSString * filePath = [path stringByAppendingPathComponent:@"person"]; // 归档 [NSKeyedArchiver archiveRootObject:person toFile:filePath]; NSLog(@"%@",NSHomeDirectory());}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}@end
ViewController.h
#import "ViewController.h"#import "CZPerson.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. //反归档 (反序列化) //1.获取路径 NSString * path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; //2.拼接文件名 NSString * filePath = [path stringByAppendingPathComponent:@"person"]; //3.通过反归档读取数据 CZPerson * p = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; NSLog(@"name =%@ phone = %@",p.name,p.phone);// [self test01];}//归档 (序列化)- (void) test01{ //创建person对象 CZPerson * person = [[CZPerson alloc] init]; //赋值 person.name = @"JackMeng"; person.phone = @"186000001"; //获取路径 NSString * path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; //拼接文件名 NSString * filePath = [path stringByAppendingPathComponent:@"person"]; // 归档 [NSKeyedArchiver archiveRootObject:person toFile:filePath]; NSLog(@"%@",NSHomeDirectory());}@end
0 0
- iOS开发之数据存储
- iOS开发之数据存储方案
- iOS 开发数据存储之magic record
- 【iOS-Android开发对比】之 数据存储
- 13、iOS开发之数据存储
- iOS软件开发 数据存储之SQLite3
- iOS开发之数据存储(一)
- iOS开发之SQLite3数据存储
- iOS开发之Core Data数据存储
- IOS开发学习笔记之数据存储
- iOS开发 数据存储之NSUserDefaults
- iOS开发 数据存储之NSKeyedArchiver
- iOS开发 数据存储之write
- iOS开发 数据存储之YYCache
- iOS开发 数据存储之FMDB
- iOS开发 数据存储之SQLite3
- 【iOS开发-存储】数据持久化之plist存储
- ios开发 数据存储
- Alljoyn瘦客户端库介绍
- 基础知识整理
- hdu-1247
- 指针和引用的参数传递
- hdu-1251
- iOS开发之数据存储
- hdu-2846 Repository
- 字符串的空格替换
- hdu-4287 Intelligent IME
- hdu-1800
- 动态规划中的0-1背包模型
- CF#345 div2 A\B\C题
- C++中输入输出流运算符的重载
- batch learning和stochastic learning