- Documents : 1: 存入一些永远不被删除的文件(不会被系统主动删除),itunes备份时,同时也会备份Documents文件(条件: 尽量不在Documents放入音频视频等太大的东西,只放一些重要文件,以免审核被拒) 注 :可以存,有方法让什么
- Library : 1 Caches : 存储缓存的文件夹 当用户对某一个URL做请求操作的时候,这个URL里面的东西会保存在主机里面的某个位置 . Cookie 和Session . (itunes不会备份此目录,文件不会再应用退出时删除,一般存放比较大,不是特别重要的资源)
- tmp : 保存应用运行时所需的临时数据,使用完毕后会将相应的文件从该目录删除.应用没有运行时或者手机重启时 ,系统也有可能会清除该目录下的文件,iTunes 不会同步该目录
- 第一种 : 通过该NSSeach搜索文件夹得地址,能获取Documents 和Library 内部文件夹地址, 但是不能获取tmp文件夹得地址,其他的都可以获取到.
//NSLibraryDirectory / NSCachesDirectory
//NSUserDomainMask 表示用户的主目录
//第三个参数表示 展开"~" 的地址,设置为YES 为完整路径
//NSSearchPathForDirectoriesInDomains获取的是一个数组(NSArray<NSString *> *),数组只有一个元素,所以可以直接获取objectAtIndex: 0 ;
NSString *documentPathStr = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];
- 第二种 : 首先获取沙盒主路径的地址,然后拼接上想要去的文件夹的地址.
NSString *homePathStr = NSHomeDirectory();
NSLog(@"homePathStr = %@",homePathStr);
//其次: 在沙盒主路径后拼接Documents,拼接出来documents文件夹的路径
NSString *documentsPathStr = [homePathStr stringByAppendingPathComponent:@"Library/Caches"];
NSLog(@"documents = %@",documentsPathStr);
//获取tmp文件夹得路径
NSString *tmpPathStr = NSTemporaryDirectory();
- 写入
NSString *documentsPathStr = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];
NSLog(@"%@",documentsPathStr);
//2 . 知道要存什么, 创建数据
NSString *str = @"hello world";
//3 . 要知道数据放哪里 , 创建一个路径,路径的终点局势存数据的文件 Component(成分)
NSString *strPath = [documentsPathStr stringByAppendingPathComponent:@"str.txt"];
//4 . 写入操作
// atomically : YES 正当手机没电关机 会保存文件
// NO 否
// encoding : 编码方式
[str writeToFile:strPath atomically:YES encoding:NSUTF8StringEncoding error:nil];
- 读取
根据imageName获取图片:会在缓存里存一份,下次在获取同名图片,直接从缓存里取. 优点 :快 ,只有第一次的时候慢 ,但是之后再获取的话会很快. 缺点 : 会浪费内存, 如果只用致辞的话这块内存就浪费掉了.
根据ContentsOfFile获取到的图片: 每次都会根据路径去取图片,不会占用内存.如果图片只使用一次,推荐使用ContentsOfFile
UIImage *image1 = [UIImage imageNamed:<#(nonnull NSString *)#>];
UIImage *image2 = [UIImage alloc]initWithContentsOfFile:<#(nonnull NSString *)#>];
123.png
[email protected]
[email protected]
- 写入
- 读取数据
UIImage *newImage = [UIImage imageWithData:newData];
UIImageView *newImageView = [[UIImageView alloc]initWithImage:newImage];
@property(nonatomic,copy)NSString * name;
@property(nonatomic,copy)NSString * gender;
@property(nonatomic,assign)NSUInteger age;
//nonatomic assign copy atomic weak strong readonly readwrite writeonly nonnull nullable retain unsafe_unretained
//_+属性名 命名的成员变量
//
@implementation Person
//归档
//在归档和解档的时候,要把所有的属性都进行归解档
-(void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeObject:self.gender forKey:@"gender"];
[aCoder encodeInteger:self.age forKey:@"age"];
}
//解档
-(instancetype)initWithCoder:(NSCoder *)aDecoder{
if (self = [super init]) {
self.name = [aDecoder decodeObjectForKey:@"name"];
self.gender = [aDecoder decodeObjectForKey:@"gender"];
self.age = [aDecoder decodeIntegerForKey:@"age"];
}
return self;
}
#import "Person.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
person.name = @"男";
person.gender = @"男";
person.age = 38 ;
#pragma mark ------归档
//将复杂对象归档之后存入本地
NSKeyedArchiver *keyedArchiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];
#pragma mark --------解档并使用
//第 1 步: 从本地获取到Data
NSData *newData = [NSData dataWithContentsOfFile:dataPath];
NSLog(@"%@",newData);
//第 2 步: 通过获取到的data 创建一个解档工具
NSKeyedUnarchiver *keyedUnarchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:newData];
//第 3 步:创建一个Person对象,接收解档结果
Person *newPerson = [keyedUnarchiver decodeObjectForKey:@"person"];
//第 4 步:结束解档
[keyedUnarchiver finishDecoding];
//
NSLog(@"%@",newPerson);
//归解档是一种编码方式,不是数据本地化的方式
//负载对象写入本地实际上使用的还是writeToFile 的简单写入本地的方法
//整存整取 writeToFile
- 简单对象写入文件过程:
- 创建字符串获取存储文件的文件夹路径
- 创建需要存储的数据
- 创建字符串通过拼接创建并获得存储文件的路径
- 写入 writeToFile
- 读取: 通过路径读取数据,使用stringWithContentsOfFile方法
- 归档:
- 创建对象 (并设置属性)
- 遵循NSCoding协议,并实现方法
- 创建实例对象
- 创建NSData用来存储对象并初始化归档工具
- 创建归档工具
- 归档
- 结束归档
- 获取,拼接沙盒文件路径
- 写入
- 解档
- 获取沙盒文件路径
- 创建NSData,并接收本地数据
- 创建解档工具,通过NSData
- 创建对象,并接收解档结果
- 结束解档
- 什么类型的对象可以直接存入本地?
- NSString(在写入本地和读取时,都需要进行UTF8转码)
- NSArray
- NSDictionary
- NSData {
- NSData如何转出UIImage : imageWithData:NSData
- UIImage如果转成NSData : UIImageJPEGRepresentation(UIImage *, CGFloat);
- 存入本地的过程?
- 直接写入本地
- sqlite
- CoreData
- NSUserDefaultes(属性列表,并不是数据本地化的一个方式,但是可以达成数据本地化)
- 传值的方式:
- block
- 代理
- 属性
- 单例
- 通知中心
- 数据本地化
- 设计模式(实现方式)
- 单例
- 代理
- Target-Action
- 通知中心