IOS 本地数据存储小结

==============================*************================================

iphone的沙盒中有四个文件夹:documents,tmp,app,Library

documents用于存储用户的基本信息、备份信息等。

 

Library          :  Library包含两个文件夹

                           Preferences和Caches

                           Preferences里存储的是程序的设置文件

                           Caches存储的是每次程序启动时需要的信息。

 

AppName.app:存储程序的代码。注:运行时不能更改文件夹下的内容,否则将导致程序无法正常启动。

 

tmp :用于存储程序运行时产生的临时信息,程序退出时自动删除。

 

===============具体实现代码=============

Write写入:

//获取文件的保存路径 -

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,  NSUserDomainMask,YES);

NSString *str =[paths objectAtIndex:0];

//生成存入路径中的文件
NSString *string=[documentDirectory stringByAppendingPathComponent:str];

//往文件中写数据

[data writeToFile:string atomically:YES];

//从文件中读取数据

NSData *data = [NSData dataWithContentsOfFile:string options:str error:nil];

 

====================分割线======================

 

NSUserDefaults用来保存应用程序设置和属性、用户保存的数据。用户再次打开程序或开机后这些数据仍然存在。NSUserDefaults可以存储的数据类型包括:NSData、NSString、NSNumber、NSDate、NSArray、NSDictionary。如果要存储其他类型,则需要转换为前面的类型,才能用NSUserDefaults存储。具体实现为:

保存数据:

NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
NSString *name =@”default string“;
[defaults setObject:firstName forKey:@"name"];

UIImage *image=[[UIImage alloc]initWithContentsOfFile:@"photo.jpg"];

NSData *imageData = UIImageJPEGRepresentation(image, 100);

[defaults synchronize];

读取数据

NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
NSString *name = [defaults objectForKey:@"name"];//根据键值取出name
NSData *imageData = [defaults dataForKey:@"image"];
UIImage *Image = [UIImage imageWithData:imageData];//NSData转换为UIImage

 

===================分割线====================


NSKeyedArchiver:采用归档的形式来保存数据,该数据对象需要遵守NSCoding协议,并且该对象对应的类必须提供encodeWithCoder:和initWithCoder:方法。前一个方法告诉系统怎么对对象进行编码,而后一个方法则是告诉系统怎么对对象进行解码

定义Possession:

@interface Possession:NSObject<NSCoding>{//遵守NSCoding协议

       NSString *name;

}

@implementation Possession

-(void)encodeWithCoder:(NSCoder *)aCoder{

            [aCoder encodeObject:name forKey:@"name"];

}

-(void)initWithCoder:(NSCoder *)aDecoder{

            name=[[aDeCoder decodeObjectforKey:@"name"] retain];

}

归档:

如果对Possession对象allPossession归档保存,只需要NSCoder子类NSKeyedArchiver的方法archiveRootObject:toFile: 即可。

NSString *path = [self possessionArchivePath];

[NSKeyedArchiver archiveRootObject:allPossessions toFile: path ]

解档:

同样调用NSCoder子类NSKeyedArchiver的方法unarchiveRootObject:toFile:

allPossessions = [[NSKeyedUnarchiver unarchiveObjectWithFile:path] retain];

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值