数据持久化(归档和反归档操作 ,清除缓存等等)

数据持久化的步骤

// 1.指定前往哪个文件夹
// 2,用字符串接收路径
// 3.拼接文件夹路径
// 4.写入本地或者归档操作
// 注 :如果是复杂对象归档 ,要签订NSCoding方法 .并且实现两个协议方法,放在数组里的复杂对象归档也要签协议

苹果手机为了保证自己数据上的绝对的安全设计了沙盒文件 ,每一个应用程序都配备了自己的沙盒文件 ,每一次运行 ,文件夹的名字就会变成一个没有任何规律的字符串

复杂对象写入到本地 ,主要至我们自己创建的对象写入到本地, 也叫归档和反归档操作

结构体 归档与反归档

创建对象

Student *stu =[[Student alloc] initWithName:@"11" hobby:@"11" sex:@"11" age:70];

1.通过数组获取沙盒地址
 NSArray *sandBox =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

2.用字符串保存沙盒路径
NSString *sandBoxPath =sandBox[0];

3.拼接文件夹路径 ,这个文件的扩展名是任意的
NSString *documentPath =[sandBoxPath stringByAppendingPathComponent:@"学生.avi"];

4.对对象进行归档操作
第一个参数 :要试试归档的对象
第二个参数 :路径

[NSKeyedArchiver archiveRootObject:stu toFile:documentPath];

反归档
Student *newstu =[NSKeyedUnarchiver unarchiveObjectWithFile:documentPath];

数组归档

Student *stu =[[Student alloc] initWithName:@"11" hobby:@"11" sex:@"11" age:70];
    Student *stu1 =[[Student alloc] initWithName:@"22" hobby:@"22" sex:@"nan" age:71];
    Student *stu2 =[[Student alloc] initWithName:@"33" hobby:@"33" sex:@"nv" age:30];
    NSMutableArray *arr =[NSMutableArray arrayWithObjects:stu,stu1,stu2, nil];

  NSArray *sandBox =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *sandBoxPath =sandBox[0];
    NSString *document=[sandBoxPath stringByAppendingPathComponent:@"xuesheng.avi"];

  // 归档
    [NSKeyedArchiver archiveRootObject:arr toFile:document];
    NSLog(@"%@",document);

  // 反归档

  NSArray *newArr =[NSKeyedUnarchiver unarchiveObjectWithFile:document];

   for (Student *stu in newArr) {
        NSLog(@"%@",stu.name);
    }

NSUserDefaults 一般存放的实效的数据,比如字符串等,他用法和字典类似

    NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];

    [defaults setObject:@"12345" forKey:@"password"];
    [defaults synchronize];
    NSArray *sandBox =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *sandBoxPath =sandBox[0];
    NSLog(@"%@",sandBoxPath);
    NSLog(@"%@", [defaults objectForKey:@"password"]);

通过文件管理者对文件进行操作

  NSArray *sandBox=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 1, YES);
    NSString *sandBoxPath=sandBox[0];
    // 创建一个文件管理者
    NSFileManager *manager =[NSFileManager defaultManager];
    // 给要创建的文件夹拼接一个路径
    NSString *filePath =[sandBoxPath stringByAppendingPathComponent:@"guyu"];
    // 文件夹的名不需要有任何的扩展名
    // 通过manager进行文件夹的创建
    [manager createDirectoryAtPath:filePath withIntermediateDirectories:YES attributes:nil error:nil];
//    NSLog(@"%@",filePath);

  // 向新创建的文件夹里写入一个字符串

    NSString *document =[filePath stringByAppendingPathComponent:@"guyu.txt"];
    NSString *str [email protected]"11";

    [str writeToFile:document atomically:YES encoding:NSUTF8StringEncoding error:nil];

移除文件夹
//    [manager removeItemAtPath:filePath error:nil];
//    NSLog(@"%@",sandBoxPath);

移除缓存文件

NSArray *scache= NSSearchPathForDirectoriesInDomains(NSCachesDirectory, 1, YES);
    NSString *cachePath = scache[0];
    [manager removeItemAtPath:cachePath error:nil];
    NSLog(@"%@",cachePath);

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-28 08:30:27

数据持久化(归档和反归档操作 ,清除缓存等等)的相关文章

DataPersistence(数据持久化: 文件读写, NSUserDefault, 归档)

 DataPersistence(数据持久化) 1.数据持久化?   数据永久的保存 2.为什么要做数据持久化?   要把之前的操作(存档, 记录等)保存起来 3.为什么数据之前保存不了呢?   以前的数据都存在内存中, 程序一旦终止, 内存就会被收回 4.数据保存到哪里, 才能做数据持久化   把数据存到硬盘里 5.存到硬盘的哪个位置呢?   沙盒机制: iOS会为每一个应用, 单独创建一个文件夹(沙盒), 这个文件夹只允许当前应用访问 6.如何通过代码获取路径? 7.沙盒文件夹又分了多个子文

【学习ios之路:UI系列】iOS沙盒机制,文件读取,归档与反归档

1.IOS中的沙盒机制 IOS中的沙盒机制是一种安全体系,它规定了应用程序只能在为该应用创建的文件夹内读取文件,不可以访问其他地方的内容.所有的非代码文件都保存在这个地方,比如图片.声音.属性列表和文本文件等. 特点: 1.每个应用程序都在自己的沙盒内 2.不能随意跨越自己的沙盒去访问别的应用程序沙盒的内容 3.应用程序向外请求或接收数据都需要经过权限认证 每个沙盒含有3个文件夹:Documents, Library 和 tmp.Library包含Caches.Preferences目录.如下图

iOS中的 沙盒文件夹 (数据的写入和读取,归档和反归档)

AppDelegate.m - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { /** 沙盒中文件夹: 1.Documents : 存储长久保存的数据 2.library: Caches:存放的缓存,比如:视频,音频,图片,小说等等 Perferences:存储偏好设置,比如:应用程序是否是第一次启动 保存用户名和密码. 3.t

iOS中的数据存储 NSUserDefault NSKeyedArchiver(归档和反归档)

应用沙盒: 每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录)与其他文件系统隔离.应用必须待在自己的沙盒里,其他应用不能访问该沙盒. 模拟器应用沙盒的根路径在: (apple是用户名, 6.0是模拟器版本) /Users/apple/Library/Application Support/iPhone Simulator/6.0/Applications 或者: /Users/用户名/资源库/Application Support/iPhone Simulator/6.1/Applic

复杂对象的归档和反归档

1.首先对象类遵守NSCoding 实现:代理方法 // 编码 **********对应于归档(存)的时候*********-(void)encodeWithCoder:(NSCoder *)aCoder { [aCoder encodeObject:self.name forKey:@"name"];    [aCoder encodeObject:self.sex forKey:@"sex"];    }// 解码(反编码---取值)-(id)initWithC

归档与反归档

一.归档操作 NSArray *array = @[@"归档",@"反归档",@"开始"]; //1.创建归档对象 NSMutableData *data = [NSMutableData data]; NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]  initForWritingWithMutableData:data]; //2.归档 [archiver encodeObject:pe

Nscoding 对类进行归档和反归档

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

UI14-沙盒机制,文件的读写,文件管理器的增删移动复制,归档和反归档。

1.复杂对象的归档反归档.person类的使用acoder,进行编码.使用decoder进行根据标记,解码. 2.再使用多个person类中,需要转化工具和解转化工具,achiver,unchiever,记得结束要finish. 3.文件管理器 对文件和文件夹的增删改移动. 4.读取沙盒的文件,和三个主要路径 5.简单类的读取写入,string,数组,和字典.

【iOS开发-存储】使用NSCoding归档和反归档

iOS开发中要想存储对象可以使用NSCoding,要想存储的对象必须实验NSCoding协议 比如我们要存储一个Student对象,那么Student类必须遵循NSCoding协议,然后实现NSCoding中得两个方法. @interface Student : NSObject <NSCoding> 然后再.m文件中实现encodeWithCoder:(存)和initWithCoder:(读)方法,这样就告诉了程序这个对象应该怎么存,要存那些属性,以及需要怎么读! /** * 将某个对象写入