【IPHONE开发-OBJECTC入门学习】对象的归档和解归档

2023-04-12编程技术64922

转自:http://blog.csdn.net/java886o/article/details/9046967

    #import <Foundation/Foundation.h>
    #import "Person.h"
    int main(int argc, const char * argv[])
    {
    @autoreleasepool {
    //-----------第1种归档方式---------
    //1.使用NSKeyedArchiver 归档对象到文件(对象序列化,持久化)
    NSArray* arrays = [[NSArray alloc]initWithObjects:@"111",@"222", nil];
    NSString* userPath = NSHomeDirectoryForUser(@"3g2win");
    NSLog(@"userPath=%@",userPath);
    NSString* bakFilePath = [userPath stringByAppendingFormat:@"/test.txt"];
    NSLog(@"bakFilePath=%@",bakFilePath);
    NSLog(@"归档前的数组:\n\n%@",arrays);
    //归档
    if ([NSKeyedArchiver archiveRootObject:arrays toFile:bakFilePath]){
    NSLog(@"归档成功...\n\n");
    }else {
    NSLog(@"归档失败...\n\n");
    }
    //2.使用NSKeyedUnarchiver 解归档文件到对象(反序列化)
    //解归档
    NSArray* srcArr =  [NSKeyedUnarchiver unarchiveObjectWithFile:bakFilePath];
    NSLog(@"解归档后的数组:\n\n%@",srcArr);
    //------------第2种归档方式---------
    //归档
    NSMutableData* data = [NSMutableData alloc];
    NSKeyedArchiver* archiver = [NSKeyedArchiver alloc];
    [archiver initForWritingWithMutableData:data];
    [archiver encodeObject:@"张三" forKey:@"name"];
    [archiver encodeInt:25 forKey:@"age"];
    [archiver encodeFloat:5200.5F forKey:@"money"];
    [archiver finishEncoding];
    [data writeToFile:@"/Users/3g2win/11111111111.txt" atomically:YES];
    //解归档
    NSMutableData* data2 = [NSMutableData dataWithContentsOfFile:@"/Users/3g2win/11111111111.txt"];
    NSKeyedUnarchiver* unArchiver = [NSKeyedUnarchiver alloc];
    [unArchiver initForReadingWithData:data2];
    NSLog(@"name=%@",[unArchiver decodeObjectForKey:@"name"]);
    NSLog(@"age=%d",[unArchiver decodeIntForKey:@"age"]);
    NSLog(@"money=%f",[unArchiver decodeFloatForKey:@"money"]);
    //-------------自定义对象的归档和解归档------------
    Person* zhao6 = [[Person alloc] initWithName:@"赵六" withAge:18];
    [zhao6 display];
    //归档
    [NSKeyedArchiver archiveRootObject:zhao6 toFile:@"/Users/3g2win/zhao6.txt"];
    //解档
    Person* newZhao6 = [NSKeyedUnarchiver unarchiveObjectWithFile:@"/Users/3g2win/zhao6.txt"];
    [newZhao6 display];
    }
    return 0;
    }
#import <Foundation/Foundation.h>
#import "Person.h" int main(int argc, const char * argv[])
{ @autoreleasepool { //-----------第1种归档方式--------- //1.使用NSKeyedArchiver 归档对象到文件(对象序列化,持久化)
NSArray* arrays = [[NSArray alloc]initWithObjects:@"111",@"222", nil]; NSString* userPath = NSHomeDirectoryForUser(@"3g2win"); NSLog(@"userPath=%@",userPath); NSString* bakFilePath = [userPath stringByAppendingFormat:@"/test.txt"]; NSLog(@"bakFilePath=%@",bakFilePath); NSLog(@"归档前的数组:\n\n%@",arrays); //归档 if ([NSKeyedArchiver archiveRootObject:arrays toFile:bakFilePath]){
NSLog(@"归档成功...\n\n");
}else {
NSLog(@"归档失败...\n\n");
} //2.使用NSKeyedUnarchiver 解归档文件到对象(反序列化)
//解归档
NSArray* srcArr = [NSKeyedUnarchiver unarchiveObjectWithFile:bakFilePath]; NSLog(@"解归档后的数组:\n\n%@",srcArr); //------------第2种归档方式--------- //归档
NSMutableData* data = [NSMutableData alloc];
NSKeyedArchiver* archiver = [NSKeyedArchiver alloc];
[archiver initForWritingWithMutableData:data];
[archiver encodeObject:@"张三" forKey:@"name"];
[archiver encodeInt:25 forKey:@"age"];
[archiver encodeFloat:5200.5F forKey:@"money"];
[archiver finishEncoding];
[data writeToFile:@"/Users/3g2win/11111111111.txt" atomically:YES]; //解归档
NSMutableData* data2 = [NSMutableData dataWithContentsOfFile:@"/Users/3g2win/11111111111.txt"];
NSKeyedUnarchiver* unArchiver = [NSKeyedUnarchiver alloc];
[unArchiver initForReadingWithData:data2]; NSLog(@"name=%@",[unArchiver decodeObjectForKey:@"name"]); NSLog(@"age=%d",[unArchiver decodeIntForKey:@"age"]); NSLog(@"money=%f",[unArchiver decodeFloatForKey:@"money"]); //-------------自定义对象的归档和解归档------------
Person* zhao6 = [[Person alloc] initWithName:@"赵六" withAge:18]; [zhao6 display]; //归档
[NSKeyedArchiver archiveRootObject:zhao6 toFile:@"/Users/3g2win/zhao6.txt"]; //解档 Person* newZhao6 = [NSKeyedUnarchiver unarchiveObjectWithFile:@"/Users/3g2win/zhao6.txt"]; [newZhao6 display]; }
return 0;
}

Person.h

    #import <Foundation/Foundation.h>
    //必须实现NSCoding协议才能够归档解归档自定义类
    @interface Person : NSObject <NSCoding>
    {
    NSString* name;
    int age;
    }
    @property (nonatomic,assign) NSString* name;
    @property (nonatomic,assign) int age;
    - (id) initWithName:(NSString*) _name withAge:(int) _age;
    - (void) display;
    @end
#import <Foundation/Foundation.h>

//必须实现NSCoding协议才能够归档解归档自定义类

@interface Person : NSObject <NSCoding>

{
NSString* name;
int age;
} @property (nonatomic,assign) NSString* name;
@property (nonatomic,assign) int age; - (id) initWithName:(NSString*) _name withAge:(int) _age; - (void) display; @end

Person.m

      #import "Person.h"
      #define NAME @"NAME"
      #define AGE @"AGE"
      @implementation Person
      @synthesize name;
      @synthesize age;
      - (id) initWithName:(NSString*) _name withAge:(int) _age {
      if (self = [super init]) {
      self.name = _name;
      self.age = _age;
      }
      return self;
      }
      - (void) display {
      NSLog(@"Person Name : %@\t Age :%d",name,age);
      }
      //归档编码
      - (void)encodeWithCoder:(NSCoder *)aCoder {
      [aCoder encodeObject:name forKey:NAME];
      [aCoder encodeInt:age forKey:AGE];
      }
      //解归档解码
      - (id)initWithCoder:(NSCoder *)aDecoder {
      if (self = [super init]) {
      self.name = [aDecoder decodeObjectForKey:NAME];
      self.age = [aDecoder decodeIntForKey:AGE];
      }
      return self;
      }
      @end

【IPHONE开发-OBJECTC入门学习】对象的归档和解归档的相关教程结束。

本文地址:https://www.ufcn.cn/tutorials/2453256.html

如非特殊说明,本站内容均来自于网友自主分享,概不代表本站观点,如有任何问题我们都将在收到反馈后的第一时间进行处理!