一、XML属性列表(plist)归档
1>拖2个按钮(保存和读取)并监听
2>实现方法
-(IBAction)save { //1.获得沙盒路径 NSString *path = NSHomeDirectory(); //2.document路径 NSString *docPath = [home stringByAppendingPathComponent:
@"Documents"];
//3.新建数据 //只能存NSString/字典/数组/NSDate等基本OC对象类型 NSArray *data = @[@“jack”,@10,@"ffsf"]; NSString *filepath = [docPath stringByAppendingPathComponent: @"data.plist"]; [data writeToFile:filepath atomically:YES]; }
-(IBAction)read
{ //1.获得沙盒路径 NSString *path = NSHomeDirectory(); //2.document路径 NSString *docPath = [home stringByAppendingPathComponent: @"Documents"]; //3.文件路径 NSString *filepath = [docPath stringByAppendingPathComponent: @"data.plist"]; //4.读取数据 NSArray *data = [NSArray arrayWithContentsOfFile:filepath]; }
二、偏好设置
1>拖2个按钮(保存和读取)并监听
2>实现方法
-(IBAction)save
{ //1.利用NSUserDefaults就能直接访问软件的偏好设置(Library/Preferences) NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; //2.存储数据 [defaults setObject:@"mj" forKey:@"account"]; [defaults setInteger:10 forKey:@"age"]; //3.立刻同步 [defaults synchronize]; }
-(IBAction)read { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *account = [defaults objectForKey:@"account"]; }
三、NSKeyedArchiver归档(存储自定义类型的对象)
1>新建一个person类,并添加几条属性
2>拖2个按钮(保存和读取)并监听
3>实现方法
-(IBAction)save { MJPerson *p = [[MJPerson alloc] init]; p.name = @"Jack"; p.age = 10; p.height = 155; NSString *path = 桌面; //归档 [NSKeyedArchiver archiveRootObject:p toFile:path]; }
-(IBAction)read { NSString *path = 桌面; //读档(反归档) [NSKeyedUnarchiver unarchiveObjectWithFile:path]; }
4>person遵守<NSCoding协议>,并实现2个协议方法
#pragma mark 将对象归档的时候会调用(将对象写入文件之前会调用) //在这个方法中说清楚 //1.哪些属性需要存储 //2.怎样存储这些属性 -(void)encodeWithCoder:(NSCoder *)encoder { //将_name属性值进行编码(会将_name的值存进文件) [encoder encodeObject:_name forKey:@"name"]; [encoder encodeInt:_age forKey:@"age"]; } #pragma mark 当从文件中解析对象时调用 //在这个方法中说清楚 //1.哪些属性需要解析(读取) //2.怎样解析(读取)这些属性 -(void)initWithCoder:(NSCoder *)decoder { if(self = [super init]){ _name = [decoder decodeObjectForKey:@"name"]; _age= [decoder decodeObjectForKey:@"age"]; } return self; }
数据存储总结:
1.plist属性列表
1>适用对象:仅仅是Foundation框架中自带的一些类,比如
NSString/NSArray/NSDictionary/NSSet/NSNumber/NSData
2>调用对象的writeToFile 方法就可以写入文件
3>调用对象的XXXwithContentsOfFile方法就可以从文件中读取对象内容
2.偏好设置
1>本质还是plist属性列表的方式进行存储
2>存取非常简单
* 不用关心文件夹和文件名
3>缺点:只能存储到一个文件中(不能存放大批量数据)
3.NSCoding
1>能将任何遵守了NSCoding协议的对象塞进文件中
2>实现2个协议方法
#pragma mark 将对象归档的时候会调用(将对象写入文件之前会调用)
//在这个方法中说清楚
//1.哪些属性需要存储
//2.怎样存储这些属性
-(void)encodeWithCoder:(NSCoder *)encoder
#pragma mark 当从文件中解析对象时调用
//在这个方法中说清楚
//1.哪些属性需要解析(读取)
//2.怎样解析(读取)这些属性
-(void)initWithCoder:(NSCoder *)decoder
3>若新建一个子类(而且有新的属性)想要归档和读档,那么必须自己重写这2个方法,先调用父类的这2个方法,然后将新加的属性进行编码和解码即可。
注意:父类的属性由父类来存储,即使子类使用了父类的属性,也不要让子类来存储这个父类的属性。
4.SQLite
1>适用于存储大批量数据
5.Core Data
1>iOS 5.0出现
2>效率低下(封装了SQLite3)
6.网络