【ios系列】-数据储存

第一:plist属性列表

适用对象:仅仅是Foundation框架自带的一些类比如:NString\NSarry\NSDictionary\NSset\NSnumber\NSdata

使用:
1:调用对象的writeToFile方法就可以写入文件
2:调用对象的array(...)WithContentsOfFile方法就可以从文件读取对象内容

存储:

//1,获得沙盒跟路径
NSString *home = NSHomeDirectory();
NSLog(@"%@",home);
//2,doucument路径,方法会自动拼接”/“
NSString *docPath = [home stringByAppendingPathComponent:@"Documents"];
//3,NSString,字典,数组,NSData,NSNumber,常见的数据类型
//新建数据
NSArray *data = @[@"java",@10,@"lallal"];
NSString *filePath = [docPath stringByAppendingPathComponent:@"data.plist"];
[data writeToFile:filePath atomically:YES];

读取:

//1,获得沙盒跟路径
NSString *home = NSHomeDirectory();
NSLog(@"%@",home);
//2,doucument路径
NSString *docPath = [home stringByAppendingPathComponent:@"Documents"];
//3,NSString,字典,数组,NSData,NSNumber,常见的数据类型
//文件路径
NSArray *data = @[@"java",@10,@"lallal"];
NSString *filePath = [docPath stringByAppendingPathComponent:@"data.plist"];

//读取数据
NSArray *array = [NSArray  arrayWithContentsOfFile:filePath];
NSLog(@"%@",array);

第二:偏好设置

本质上还是plist属性列表的方式存储
存储简单不关心文件夹和文件名,但是只能存储到一个文件中(不能储存大量数据)

存储:

//1,利用NSUserDefaults能直接访问软件的偏好设置文件夹
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
//2,存储数据
[defaults setObject:@"tf" forKey:@"account"];
[defaults setObject:@"123" forKey:@"pwd"];

//3,立刻同步
[defaults synchronize];

读取:

//读取
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *account = [defaults objectForKey:@"account"];
NSLog(@"%@",account);

第三:NSCodeing

1:能将任何遵守了NSCodeing协议的对象塞进文件中

使用:
1:-(void)encodeWithCoder:(NSCoder *)aCoder
将对象归档的时候就会调用,(将对象写入到文件之前会调用)
在这个方法中说清楚;1:那些属性要进行存储,2:怎样储存
2:-(id)initWithCoder:(NSCoder *)aDecoder
从当前文件中解析对象是调用
在这个方法中说清楚,1:那些属性需要解析(读取),2:怎样解析这些属性
注:如果父类中也有属性需要归档或者读取,必须调用super的encodeWithCoder:和initWithCoder:方法

对象中调用:
在遵循协议NSCoding的实现“.m”文件中

//存储:需要重写的方法:
-(void)encodeWithCoder:(NSCoder *)aCoder
{
    //将name属性进行编码,
    [aCoder encodeObject:_name forKey:@"name"];
    [aCoder encodeInt:_age forKey:@"age"];
}

// 读取:需要重写的方法
-(id)initWithCoder:(NSCoder *)aDecoder
{
    if (self = [super init]) {
        _name = [aDecoder decodeObjectForKey:@"name"];
        _age = [aDecoder decodeIntForKey:@"age"];
    }
    return self;
   
    //调用父类的方法
    //    if (self = [super initWithCoder:aDecoder]) {
    //
    //    }
   
}

注:如果是子类进行存取的话,需要在相应的方法第一行调用,这样父类中已经声明要进行归档的对象就不用重复声明了。

[super encodeWithCoder:aCoder];
if (self = [super initWithCoder:aDecoder]) {
 }

实例,储存:

//归档
Person *p = [[Person alloc] init];
p.name = @"jack";
p.age = 10;
p.height = 1.89;

NSString *path = @"/Users/tengfei/Desktop/person.data";
[NSKeyedArchiver archiveRootObject:p toFile:path];

读取:

//读档
NSString *path = @"/Users/tengfei/Desktop/person.data";

Person *p = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
NSLog(@"name:%@,age:%d",p.name,p.age);

---后面稍后进行介绍:

第四:SQLite
适用于大批量数据
第五:Core Data
ios5.0以后才出现,效率底下(SQLite3)

posted @ 2015-03-20 18:45  Darren.Von  阅读(862)  评论(0编辑  收藏  举报
新浪微博:IT_攻城师,github:darren90(欢迎★star点赞)