本地持久化

将NSString存储在本地
1.需要知道这个对象存在哪里,所以需要一个文件夹的路径

找到Documents文件夹路径
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

2.创建要存储的内容:字符串

NSString *str = @"stream";

3.需要知道字符串最终存储的地方。所以需要创建一个路径去存储字符串

NSString *strPath = [documentPath stringByAppendingPathComponent:@"MB.txt"];

4.准备将字符串写入文件

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

将NSString文件夹存储的内容取出来
将字符串取出:使用stringWithContentsOfFile...encoding...这个方法取出

NSString *newStr = [NSString stringWithContentsOfFile:strPath encoding:NSUTF8StringEncoding error:nil];

将NSData类型的数据存储到本地(以图片为例)

常用的两种初始化image的两种方式

1.使用imageNamed:第一次读取的时候,先把这个图片放到缓存里,下次在使用到这个同名图片的时候直接从缓存里读取;优点:方便快捷,只有第一次使用的时候稍慢,接下来在使用就会稍微快点。缺点:如果在当前工程中只使用一次会浪费内存。

2.使用initWithContentsOfFile初始化图片的时候,每次都会根据路径去读取。不会占用内存。如果图片在当前工程中只使用一次,应该选择这个方法。

UIImage *image = [[UIImage alloc] initWithContentsOfFile:@"/Users/zhaoce/Documents/Senior进阶/Lesson1/Senior_1_简单数据的存储/Senior_1_简单数据的存储/Images/[email protected]"];  //  file填写的参数是图片所在的文件夹路径,将图片show in finder 然后直接拖进来,就是路径。

用UIImageJPEGRepresentation转化为data数据 1代表图片压缩的值是本身

NSData *imageData = UIImageJPEGRepresentation(image, 1);

找到路径进行存储
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
最终路径
NSString *imagePath = [documentPath stringByAppendingString:@"/meng.jpeg"];
[imageData writeToFile:imagePath atomically:YES];

将NSData的数据读取出来,转换成UIIamge类型并显示在imageView上
    
NSData *newImageData = [NSData dataWithContentsOfFile:imagePath];
UIImage *newImage = [UIImage imageWithData:newImageData];
UIImageView *imageView = [[UIImageView alloc] initWithImage:newImage];
imageView.frame = CGRectMake(150, 200, 60, 60);
[self.view addSubview:imageView];

如何把一个person类型的对象存入本地,就是复杂对象的本地化,这个对象必须遵守NSCoding协议,并实现协议中的两个方法。

- (void)encodeWithCoder:(NSCoder *)aCoder;
- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder;

复杂对象的本地化

1.找到Documents文件夹的目录

NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

2.创建Person对象

Person *person = [Person new];
    person.name = @"帅哥";
    person.sex = @"boy";
    person.age = 25;

3.把这个复杂对象归档

3.1步:NSMutableData,用于创建归档工具的
    NSMutableData *data = [NSMutableData data];
3.2步:创建归档工具
    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];

3.3步:对要归档的person对象进行归档。
    [archiver encodeObject:person forKey:@"key"];

3.4步:结束归档
    [archiver finishEncoding];

4.将归档的内容存储到本地
    NSString *personPath = [documentPath stringByAppendingPathComponent:@"person.plist"];
    [data writeToFile:personPath atomically:YES];

/*******************************************************/

解档

1.将要解档的数据找出
    NSData *resultData = [NSData dataWithContentsOfFile:personPath];

2.创建解档工具
    NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:resultData];

3.对person对象进行解档
    Person *newPerson = [unarchiver decodeObjectForKey:@"key"];

4.结束解档
    [unarchiver finishDecoding];

时间: 2024-08-09 22:02:27

本地持久化的相关文章

【Unity3D游戏开发】—— PlayerPrefs类实现本地持久化数据存储

在很多游戏中都会有"存储进度","读取进度"等菜单,或者当我们进入下一个场景时有些数据需要带入下一个场景.这就需要数据储存.Unity中提供了一个用于本地持久化保存于读取数据的类--PlayerPrefs. 它是以键值对的形式将数据保存在文件中. 下面来看看PlayerPrefs的简单用法.. //得到存储的数据 Grade = PlayerPrefs.GetFloat("mGrade", 0.0f).ToString(); //获取浮点型 Ag

storageclass和本地持久化存储

StorageClass 之前我们部署了PV 和 PVC 的使用方法,但是前面的 PV 都是静态的,什么意思?就是我要使用的一个 PVC 的话就必须手动去创建一个 PV,我们也说过这种方式在很大程度上并不能满足我们的需求,比如我们有一个应用需要对存储的并发度要求比较高,而另外一个应用对读写速度又要求比较高,特别是对于 StatefulSet 类型的应用简单的来使用静态的 PV 就很不合适了,这种情况下我们就需要用到动态 PV,也就是我们今天要讲解的 StorageClass. 创建 要使用 St

iOS数据本地持久化

p1: iOS开发中本地存储主要有三种形式 XML属性列表(plist)归档 Preference(偏好设置) NSKeyedArchiver归档(NSCoding) 应用沙盒 什么是应用沙盒 要想在本地存储数据,那就要知道一下什么是应用沙盒 ,其实很好理解应用沙盒就是应用的文件夹,与其他文件系统隔离.每一个iOS应用都有自己的应用沙盒,应用必须待在自己的沙盒里,其它应用不能访问该沙盒.如何获取应用沙盒路径,可以通过打印NSHomeDirectory()来获取应用沙盒路径,下图为打印路径结果:

本地持久化存储

//用持久化对象去存储一个字符串作为标识,如果找到标识用户不是第一次登陆,就加在主界面,如果找不到,说明用户是第一次登陆,加载引导界面. if (![[NSUserDefaults standardUserDefaults] boolForKey:@"ccc"]) { UserGuideViewController *guideVC = [[UserGuideViewController alloc] init]; self.window.rootViewController = gu

iOS 关于本地持久化存储的探讨

目前,用以本地化存储的方式有很多,常用的有以下: 1.临时缓存 先说说临时缓存,临时缓存一般相当于用来管理应用程序中全局需要常用的一些内容.比如当前用户的ID或者当前的定位信息等. 常用的方式就是写一个静态变量,然后使用类方法调用.(或者单例类也行) static NSMutableDictionary *_cacheDic; #pragma mark - 临时缓存(退出应用后消失) +(id)cacheValueForKey:(SCCacheKey)key{ return [[self cac

React Native使用AsyncStorage本地持久化

AsyncStorage AsyncStorage是一个简单的,未加密的,异步的,持久化,关键值存储系统,是全局的.类似于iOS中的NSUserDefault. 存值: import { AppRegistry, StyleSheet, Text, View, AsyncStorage } from 'react-native'; try { AsyncStorage.setItem( 'key', 'shaoting', (error)=>{ if (error){ alert('存值失败:'

断点续传队列和本地持久化(iOS源码)

// // ASIFormDataRequest.m // Part of ASIHTTPRequest -> http://allseeing-i.com/ASIHTTPRequest // // Created by Ben Copsey on 07/11/2008. // Copyright 2008-2009 All-Seeing Interactive. All rights reserved. // #import "ASIFormDataRequest.h" //

iOS数据持久化存储

本文中的代码托管在github上:https://github.com/WindyShade/DataSaveMethods 相对复杂的App仅靠内存的数据肯定无法满足,数据写磁盘作持久化存储是几乎每个客户端软件都需要做的.简单如"是否第一次打开"的BOOL值,大到游戏的进度和状态等数据,都需要进行本地持久化存储.这些数据的存储本质上就是写磁盘存文件,原始一点可以用iOS本身支持有NSFileManager这样的API,或者干脆C语言fwrite/fread,Cocoa Touch本身

阅读郭林《第一行代码》的笔记——第6章 数据存储全方案,详解持久化技术

瞬时数据是指那些存储在内存当中,有可能会因为程序关闭或其他原因导致内存被回收而丢失的数据.这对于一些关键性的数据信息来说是绝对不能容忍的,谁都不希望自己刚发出去的一条微博,刷新一下就没了吧.那么怎样才能保证让一些关键性的数据不会丢失呢?这就需要用到数据持久化技术了. 持久化技术简介 数据持久化就是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然不会丢失.保存在内存中的数据是处于瞬时状态的,而保存在存储设备中的数据是处于持久状态的,持久化技术则是提供了一种机