zoukankan      html  css  js  c++  java
  • 本地持久化

    将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 /v_red_heart_selected@2x.png"];  //  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];

  • 相关阅读:
    parse_str — 将字符串解析成多个变量
    HTTP 协议入门
    Ruby自动文档工具 RDoc 3.3 发布 狼人:
    用好IE9浏览器必须要知道的九件事 狼人:
    微软缘何认为VB与C#需要异步语法 狼人:
    微软资深软件工程师:阅读代码真的很难 狼人:
    20款Web应用:可以替代桌面软件 狼人:
    互联网公司完善商业模式需完成七件事情 狼人:
    改良程序需要的11个技巧 狼人:
    开源网站建设工具Drupal 7发布 狼人:
  • 原文地址:https://www.cnblogs.com/yyd100286480/p/5460172.html
Copyright © 2011-2022 走看看