zoukankan      html  css  js  c++  java
  • 【IPHONE开发-OBJECTC入门学习】对象的归档和解归档

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

    1. #import <Foundation/Foundation.h>   
    2. #import "Person.h"   
    3.   
    4. int main(int argc, const char * argv[])  
    5. {  
    6.       
    7.     @autoreleasepool {  
    8.           
    9.         //-----------第1种归档方式---------   
    10.           
    11.         //1.使用NSKeyedArchiver 归档对象到文件(对象序列化,持久化)   
    12.         NSArray* arrays = [[NSArray alloc]initWithObjects:@"111",@"222", nil];  
    13.           
    14.         NSString* userPath = NSHomeDirectoryForUser(@"3g2win");  
    15.           
    16.         NSLog(@"userPath=%@",userPath);  
    17.           
    18.         NSString* bakFilePath = [userPath stringByAppendingFormat:@"/test.txt"];  
    19.           
    20.         NSLog(@"bakFilePath=%@",bakFilePath);  
    21.           
    22.         NSLog(@"归档前的数组: %@",arrays);  
    23.           
    24.           
    25.         //归档   
    26.           
    27.         if ([NSKeyedArchiver archiveRootObject:arrays toFile:bakFilePath]){  
    28.             NSLog(@"归档成功... ");  
    29.         }else {  
    30.             NSLog(@"归档失败... ");  
    31.         }  
    32.           
    33.           
    34.           
    35.           
    36.         //2.使用NSKeyedUnarchiver 解归档文件到对象(反序列化)   
    37.         //解归档   
    38.         NSArray* srcArr =  [NSKeyedUnarchiver unarchiveObjectWithFile:bakFilePath];  
    39.           
    40.         NSLog(@"解归档后的数组: %@",srcArr);  
    41.           
    42.           
    43.           
    44.         //------------第2种归档方式---------   
    45.           
    46.         //归档   
    47.         NSMutableData* data = [NSMutableData alloc];  
    48.         NSKeyedArchiver* archiver = [NSKeyedArchiver alloc];  
    49.         [archiver initForWritingWithMutableData:data];  
    50.         [archiver encodeObject:@"张三" forKey:@"name"];  
    51.         [archiver encodeInt:25 forKey:@"age"];  
    52.         [archiver encodeFloat:5200.5F forKey:@"money"];  
    53.         [archiver finishEncoding];  
    54.         [data writeToFile:@"/Users/3g2win/11111111111.txt" atomically:YES];  
    55.           
    56.         //解归档   
    57.         NSMutableData* data2 = [NSMutableData dataWithContentsOfFile:@"/Users/3g2win/11111111111.txt"];  
    58.         NSKeyedUnarchiver* unArchiver = [NSKeyedUnarchiver alloc];  
    59.         [unArchiver initForReadingWithData:data2];  
    60.           
    61.         NSLog(@"name=%@",[unArchiver decodeObjectForKey:@"name"]);  
    62.           
    63.         NSLog(@"age=%d",[unArchiver decodeIntForKey:@"age"]);  
    64.           
    65.         NSLog(@"money=%f",[unArchiver decodeFloatForKey:@"money"]);  
    66.           
    67.         //-------------自定义对象的归档和解归档------------   
    68.         Person* zhao6 = [[Person alloc] initWithName:@"赵六" withAge:18];  
    69.           
    70.         [zhao6 display];  
    71.           
    72.         //归档   
    73.         [NSKeyedArchiver archiveRootObject:zhao6 toFile:@"/Users/3g2win/zhao6.txt"];  
    74.           
    75.         //解档   
    76.           
    77.         Person* newZhao6 = [NSKeyedUnarchiver unarchiveObjectWithFile:@"/Users/3g2win/zhao6.txt"];  
    78.           
    79.         [newZhao6 display];  
    80.           
    81.     }  
    82.     return 0;  
    83. }  
    #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(@"归档前的数组:
    
    %@",arrays);
            
            
            //归档
            
            if ([NSKeyedArchiver archiveRootObject:arrays toFile:bakFilePath]){
                NSLog(@"归档成功...
    
    ");
            }else {
                NSLog(@"归档失败...
    
    ");
            }
            
            
            
            
            //2.使用NSKeyedUnarchiver 解归档文件到对象(反序列化)
            //解归档
            NSArray* srcArr =  [NSKeyedUnarchiver unarchiveObjectWithFile:bakFilePath];
            
            NSLog(@"解归档后的数组:
    
    %@",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

    1. #import <Foundation/Foundation.h>   
    2.   
    3. //必须实现NSCoding协议才能够归档解归档自定义类   
    4.   
    5. @interface Person : NSObject <NSCoding>  
    6.   
    7. {  
    8.     NSString* name;  
    9.     int age;  
    10. }  
    11.   
    12. @property (nonatomic,assign) NSString* name;  
    13. @property (nonatomic,assign) int age;  
    14.   
    15. - (id) initWithName:(NSString*) _name withAge:(int) _age;  
    16.   
    17. - (void) display;  
    18.   
    19.   
    20. @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

      1. #import "Person.h"   
      2.   
      3. #define NAME @"NAME"   
      4. #define AGE @"AGE"   
      5.   
      6. @implementation Person  
      7.   
      8. @synthesize name;  
      9. @synthesize age;  
      10.   
      11. - (id) initWithName:(NSString*) _name withAge:(int) _age {  
      12.     if (self = [super init]) {  
      13.         self.name = _name;  
      14.         self.age = _age;  
      15.     }  
      16.     return self;  
      17. }  
      18.   
      19. - (void) display {  
      20.     NSLog(@"Person Name : %@  Age :%d",name,age);  
      21. }  
      22.   
      23. //归档编码   
      24. - (void)encodeWithCoder:(NSCoder *)aCoder {  
      25.     [aCoder encodeObject:name forKey:NAME];  
      26.     [aCoder encodeInt:age forKey:AGE];  
      27. }  
      28.   
      29. //解归档解码   
      30. - (id)initWithCoder:(NSCoder *)aDecoder {  
      31.     if (self = [super init]) {  
      32.         self.name = [aDecoder decodeObjectForKey:NAME];  
      33.         self.age = [aDecoder decodeIntForKey:AGE];  
      34.     }  
      35.     return self;  
      36. }  
      37.   
      38. @end  
  • 相关阅读:
    VMware安装Ghost版Win10 失败的解决方法
    供销平台能导入不能编辑商品的问题
    bootstrap导航菜单做active判断
    phantomjs读取文件转换数组
    网址收藏
    清理恶意绑定浏览器网址
    sort
    论文等级
    multiThreading
    LZ4压缩算法
  • 原文地址:https://www.cnblogs.com/LCGIS/p/3290456.html
Copyright © 2011-2022 走看看