day12---本地存储数据和归档

本地存储数据方式
1.plist文件
2.归档
3.NSUserDefults
4.数据库
5.文件操作

数据的持久化存储
程序在运行中或者程序结束前,需要保持一些信息,持久化存储信息;比如:保持游戏关卡,视频播放记录,收藏记录,登陆信息;

一 plist
1.1什么是Plist文件?Plist文件的作用?
1)Plist文件全称Property list (属性列表文件),文件存储的数据只能是:NSString, NSNumber,NSArray,NSDictionary,NSData,NSDate这些系统自带的类,不能 保存自定义的对象;

    2)作用:对一些登陆注册信息或者程序配置信息进行持久化存储(小数据);

1.2如何创建操作Plist文件
    【Demo】-【1-plist文件的基本使用】

首先要创建一个plist文件,用宏重新定义一下路径PATH;(只能存储系统自带的数   据类型)

写入到plist文件
NSArray *array = @[@"One",@"Two",@"Three"];
BOOL bl = [array writeToFile:PATH atomically:YES];

读取plist文件
【注】plist文件最外层的根节点是什么类型,必须提前知道(只能是数组或者字典)
NSArray *array = [NSArray arrayWithContentsOfFile:PATH];

二 归档 【重点是保存自定义的对象】

2.1归档   NSKeyedArchiver
    也称为对象序列化,就是用某种格式把对象保存到本地问价,以便以后读取数据。。


2.2解档【读档】 NSKeyedUnarchiver
    把归档的对象文件读成原来的对象的过程;

【Demo】-【2-归档的基本使用】

首先要拼接一个路径PATH;(存储的数据类型没有限制,但是存储自定义的类型时,自定义的 类型要遵守NSCoding协议)

1)归档
NSArray *array = @[@"123",@"abc",@"xyz"];
 BOOL bl = [NSKeyedArchiver archiveRootObject:array toFile:path];

2)解档(返回的是id类型的数据,然后进行判断类型)
 NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithFile:path];

【Demo】-【3-归档自定义的对象】

3)遵守NSCoding协议
#pragma mark -NSCoding协议
-(void)encodeWithCoder:(NSCoder *)aCoder{
    [aCoder encodeInt:self.age forKey:@"名字"];
    [aCoder encodeObject:self.name forKey:@"学生姓名"];
    [aCoder encodeObject:self.bk forKey:@"学生拥有的书"];
}

-(id)initWithCoder:(NSCoder *)aDecoder{
    if ([super init]) {
        self.age = [aDecoder decodeIntForKey:@"名字"];
        self.name = [aDecoder decodeObjectForKey:@"学生姓名"];
        self.bk = [aDecoder decodeObjectForKey:@"学生拥有的书"];
    }
    return self;
}

三 ARC
自动内存管理
它是一个编译器特性
1)ARC是iOS5.0以后,增加的新特性,完全消除了手动内存管理的麻烦,编译器会自动的在适 当的地方插入retain,release,autorelease。。。语句
2)使用ARC,不需要担心内存管理的问题,编译器会帮我们处理一切。

至少要保证自己的代码要规范!
其实,ARC和MRC的性能是一样的,有时候甚至ARC更加快速,因为编译器还可以执行一些内    部优化;

ARC的特点:
1.不允许调用retain,release,retainCount,autorelease;
2.允许我们重写dealloc,但不允许调用[super dealloc];

见【Demo】-【4-ARC】

总结:
关于@property修饰符
strong:相当于原来的retain,适用用OC对象,意味着成员变量是强指针;
weak:相当于原来的assign,使用与OC对象,意味着成员变量是弱指针;
assign:使用于非OC对象
copy:适用于修饰字符串;

关于循环引用的问题:
当两端出现了循环引用,解决方案:
1.ARC:一端使用strong,一端使用weak;
2.MRC:一端使用retain,一端使用assign;

如何处理ARC和MRC混编的问题;
在Build Phases中对相应的文件下添加 “ -fno-objc-arc”表示不参与ARC自动编译

你可能感兴趣的:(day12---本地存储数据和归档)