存:把内存的东西放到硬盘中
取:把硬盘的东西放到内存中
简单对象:NSString,NSArray,NSDictionary NSData等系统的类
复杂对象:model 自己定义的类
硬盘的东西全是二进制的 NSData是通用的
沙盒的四个文件夹
1文件夹: Burdel -> {1.代码 2.资源文件 3.配置文件}
特点:1内容在程序运行期间只读,不能修改,开发期间可以修改
2文件夹: Documents
特性: 1内容会自动上传到云盘iCloud,有大小限制
2. 数据库
3. 从应用程序安装到删除都有的东西(数据库)
3文件夹: Library {1.Caches(缓存) 2.preference(配置/偏好设置)}
Caches特性:1放图片缓存 2网络数据存储(缓存)
preference: 用NSUserDefaules存
4文件夹 tmg(临时性文件夹):
数据用完就删(如:解压后的数据)
//前往文件夹
- (void)BundlePath
{
NSString * imagePath = [[NSBundle mainBundle] pathForResource:@"2" ofType:@"png"];
}
- (void)documentsPath
{
NSArray * array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
}
- (void)libraryPath
{
NSArray * array = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
}
- (void)tmpPath
{
NSString * path = NSTemporaryDirectory();
}
//简单对象的存储
#pragma mark 字符串存储
- (void)stringSave
{
NSArray * array = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString * path = [array firstObject];
NSString * paths = [NSString stringWithFormat:@"%@/oo.txt", path];
NSString * str = @"asdfasdfgefadgfaedfd";
[str writeToFile:paths atomically:YES encoding:NSUTF8StringEncoding error:nil];
}
//字符串的读取
- (void)readString
{
NSArray * array = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString * path = [array firstObject];
NSString * paths = [NSString stringWithFormat:@"%@/oo.txt", path];
NSString * stra = [NSString stringWithContentsOfFile:paths encoding:NSUTF8StringEncoding error:nil];
}
//把字符串转换为NSData
- (void)changeStringToData
{
NSString * str = @"asdfghj";
NSData * data = [str dataUsingEncoding:NSUTF8StringEncoding];
NSArray * array = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString * path = [array firstObject];
NSString * paths = [NSString stringWithFormat:@"%@/data.txt", path];
[data writeToFile:paths atomically:YES];
NSLog(@"%@", array);
}
#pragma mark NSUserDefaults 存储
//异步存储
- (void)saveUserDefaults
{
//获取对象
NSUserDefaults * def = [NSUserDefaults standardUserDefaults];
[def setObject:@"sdf" forKey:@"name"];
// 同步
[def synchronize];
}
//读取
- (void)readUserDefaults
{
NSUserDefaults * def = [NSUserDefaults standardUserDefaults];
NSString * str = [def objectForKey:@"name"];
//删除
[def removeObjectForKey:@"name"];
}
//复杂对象的存储
存储Model,要将Model转化为NSData,再将NSData进行存储
如果Model在数组中,想要存储数组,也必须用复杂类型对象将数组转换为data,然后进行存储
在Model.h中
#warning 归档: 第一步:遵循NSCoding协议
@interface Model : NSObject<NSCoding>
在Model.m中
#warning 第二步:将属性按照一定的顺序进行归档
//归档(序列化)的协议
//将属性转换为NSData的时候走下面的方法
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeInteger:self.age forKey:@"age"];
}
//反归档(反序列化),将NSData转换为Model的时候,将相对应的属性进行赋值
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (self) {
self.name = [aDecoder decodeObjectForKey:@"name"];
self.age = [aDecoder decodeIntForKey:@"age"];
}
return self;
}
- (void)modelSave
{
Model * model = [[Model alloc] init];
model.name = @"李";
model.age = 19;
NSArray * array = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString * path = [array firstObject];
NSString * paths = [NSString stringWithFormat:@"%@/datas.txt", path];
[data writeToFile:paths atomically:YES];
}
//将data转换为Model
//如果在归档的时候是数组,那么反归档得到的也是数组
Model * model = [NSKeyedUnarchiver unarchiveObjectWithData:data];