zoukankan      html  css  js  c++  java
  • 归档和深拷贝

      //将array归档到path路径中

     NSString *path = [@"a.plist" documentsAppend];

    [NSKeyedArchiver archiveRootObject:array toFile:path];

      //读取path路径中文件

    [NSKeyedUnarchiver unarchiveObjectWithFile:path];

     
    #pragma mark 写入多个Person的方法
    - (void)writePersons2 {
        Person *p1 = [Person personWithName:@"person" age:10];
        Person *p2 = [Person personWithName:@"name" age:11];
        
        NSMutableData *data = [NSMutableData data];
        
        // archiver负责将p1、p2塞进data中
        NSKeyedArchiver *archiver = [[[NSKeyedArchiver alloc] initForWritingWithMutableData:data] autorelease];
        
        [archiver encodeObject:person1 forKey:@"p1"];
        
        [archiver encodeObject:person2 forKey:@"p2"];
        
        // 编码结束
        [archiver finishEncoding];
        
        NSString *path = [@"persons2.plist" documentsAppend];
        // 将data写入某个文件中
        [data writeToFile:path atomically:YES];
     }
     
    #pragma mark 读取多个Person的方法
    - (void)readPersons2 {
        NSString *path = [@"persons2.plist" documentsAppend];
        
        NSData *data = [NSData dataWithContentsOfFile:path];
        
        NSKeyedUnarchiver *unarchiver = [[[NSKeyedUnarchiver alloc] initForReadingWithData:data] autorelease];
        
        Person *p = [unarchiver decodeObjectForKey:@"person1"];
        NSLog(@"%@", p);
     }
     
    #pragma mark 用归档技术实现深拷贝1
    // 缺点就是会产生临时文件
    - (void)copyPerson1 {
        Person *p1 = [Person personWithName:@"person" age:10];
        
        NSString *path = [@"p1.plist" tmpAppend];
        // 将对象p1归档到p1.plist文件中
        [NSKeyedArchiver archiveRootObject:p1 toFile:path];
        
        Person *p2 = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
        
        NSLog(@"p1-地址%x-%@", p1, p1);
        NSLog(@"p2-地址%x-%@", p2, p2);
     }
     
    #pragma mark 用归档技术实现深拷贝2
    - (void)copyPerson2 {
        Person *p1 = [Person personWithName:@"person" age:10];
        
        // 将对象p1归档成一个NSData对象
        NSData *data = [NSKeyedArchiver archivedDataWithRootObject:p1];
        
        Person *p2 = [NSKeyedUnarchiver unarchiveObjectWithData:data];
        
        NSLog(@"p1-地址%x-%@", p1, p1);
        NSLog(@"p2-地址%x-%@", p2, p2);
     }
     
     
     
     
     
     
  • 相关阅读:
    蓝桥杯_基础_杨辉三角
    蓝桥杯_基础_数组特征
    蓝桥杯_基础_美丽的图形
    脉象
    词根汇总
    蓝桥杯 入门训练 Fibonacci数列 解析
    制作tomcat重启.bat文件
    day23(023-递归练习)
    day27(027-反射&JDK新特性)
    day25(025-多线程(下)&GUI)
  • 原文地址:https://www.cnblogs.com/wangshengl9263/p/3050932.html
Copyright © 2011-2022 走看看