以后用的到

数据持久化 :

数据持久化,实际上就是将数据存放到网络或者硬盘上,这里是存储到本地的硬盘上,应用程序的本地硬盘是沙盒,沙盒实际上就是一个文件夹,它下面有4个文件夹。分别是Documents,Library,APP包和tmp文件夹,Documents里面主要是存储用户长期使用的文件,Library里面又有Caches和Preferences文件夹,Caches里面存放的是临时的文件,缓存。Preferences里面存放的是偏好设置。tmp里面也是临时的文件,不过和Caches还有区别,APP包里面是编译后的一些文件,包不能修改。

沙盒机制:有4个文件夹

Document :存储用户数据,需要备份到信息

Library/Caches :存储缓存文件,程序专用的支持文件

Library/Preferences :存储应用程序的偏好设置文件

.app :程序包(iOS8时,app不存储在沙盒中,有单独的文件夹储存所有程序的app包)不能被修改

tmp :存储临时文件。比如下载包,压缩后的再删除

获取主要目录路径的方式

NSHomeDirectory() : 沙盒主路径

NSDocumentDirectory : Documents文件夹

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

NSLibraryDirectory : Library文件夹

NSCachesDiectory  : Caches文件夹

NSTemporaryDirectory()  : tmp文件夹

Myapp.app : [[NSBundle mainBundle] bundlePath];

写入文件的方法

字符串对象写入文件(NSString)

//获取document路径

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

NSString * docPath = [directories lastObject];

NSString * strPath = [docPath stringByAppendingPathComponent:@"/text.txt"];

NSString * content = @"xxx,赶紧把俯卧撑做了...";

[content writeToFile:strPath atomically:YES encoding:NSUTF8StringEncoding error:nil];

数组对象写入文件 (NSArray)

NSString * arrayPath = [docPath stringByAppendingPathComponent:@"array.txt"];

NSArray * array = @[@"张三",@"李四",@"王五"];

[array writeToFile:arrayPath atomically:YES];

字典对象写入文件 (NSDictionary)

NSString * dicPath = [docPath stringByAppendingString:@"/dic.txt"];

NSDictionary * dic = @{@"name":@"小黑",@"sex":@"男",@"age":@"22"};

[dic writeToFile:dicPath atomically:YES];

二进制对象写入文件 (NSData)

NSString * dataPath = [docPath stringByAppendingString:@"/data.txt"];

UIImage * img = [UIImage imageNamed:@"1.png"];

NSData * data = UIImagePNGRepresentation(img);

[data writeToFile:dataPath atomically:YES];

NSFileManager :文件管理,使用detaultManager创建单例

//创建文件管理对象

NSString * document = [docPath stringByAppendingString:@"/a/b/c"];

NSFileManager * manager = [NSFileManager defaultManager];

[manager createDirectoryAtPath:document withIntermediateDirectories:YES attributes:nil error:nil];

//创建文件text.txt

NSString * filePath = [docPath stringByAppendingString:@"/a/b/c/text.txt"];

[manager createFileAtPath:filePath contents:nil attributes:nil];

归档反归档

首先要遵循NSCoding协议,协议有2个方法

建一个类 3个属性

//归档是调用,对对象里面的属性/实例变量进行编码

- (void)encodeWithCoder:(NSCoder *)aCoder

{

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

[aCoder encodeObject:_gender forKey:@"gender"];

[aCoder encodeInt:_age forKey:@"age"];

}

//反归档是调用,对属性/实例变量进行编码

- (id)initWithCoder:(NSCoder *)aDecoder

{

self = [super init];

if (self) {

self.name = [aDecoder decodeObjectForKey:@"name"];

self.gender = [aDecoder decodeObjectForKey:@"gender"];

self.age = [aDecoder decodeIntForKey:@"age"];

}

return self;

}

主程序中进行归档反归档

//1、定义NSMutable对象,用于存放归档后的二进制数据

NSMutableData * mulData = [NSMutableData data];

//2、定义归档工具类

NSKeyedArchiver * archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:mulData];

//3、对对象p进行编码(归档)

[archiver encodeObject:p forKey:@"person"];

//4、完成归档

[archiver finishEncoding];

//写入文件

NSString * docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];

NSString * dataPath = [docPath stringByAppendingPathComponent:@"archiveData.data"];

[mulData writeToFile:dataPath atomically:YES];

//1、从文件中读取二进制数据

NSData * readData = [NSData dataWithContentsOfFile:dataPath];

//2、定义反归档工具类

NSKeyedUnarchiver * unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:readData];

//3、解码(反归档)

Person * resultP = [unarchiver decodeObjectForKey:@"person"];

//4、结束反归档

[unarchiver finishDecoding];

- - - - - - - - - - - - - - - - - - - - - - - - - - -  - - -  - - -  - - - - - - - - -

数据库

时间: 2024-10-05 13:02:21