iOS-初级数据持久化

:把内存的东西放到硬盘中

:把硬盘的东西放到内存中

简单对象: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;

    NSData * data = [ NSKeyedArchiver archivedDataWithRootObject :model];

    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];









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值