iOS高级-数据存取


一、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.网络

posted on 2015-08-18 10:12  Marshall_Yin  阅读(150)  评论(0编辑  收藏  举报