zoukankan      html  css  js  c++  java
  • iOS对象序列化

    系统对象的归档我就不介绍了,这个不复杂,自己看一下就会了。

    我在这里主要介绍自定义对象的归档。

    Sample.h文件

     9 #import <Foundation/Foundation.h>
    10 
    11 @interface Sample : NSObject<NSCoding> {
    12     
    13     NSString* name;
    14     int magicNumber;
    15     float shoeSize;
    16     NSMutableArray *subThingies;
    17 }
    18 
    19 @property(copy) NSString* name;
    20 @property int magicNumber;
    21 @property float shoeSize;
    22 @property (retain) NSMutableArray *subThingies;
    23 
    24 
    25 -(id) initWithName:(NSString *)n magicNumber:(int)m shoeSize:(float) ss;
    26 
    27 @end

    Sample.m文件

     9 #import "Sample.h"
    10 
    11 @implementation Sample
    12 
    13 @synthesize name;
    14 @synthesize magicNumber;
    15 @synthesize shoeSize;
    16 @synthesize subThingies;
    17 
    18 -(id) initWithName:(NSString *)n magicNumber:(int)m shoeSize:(float)ss
    19 {
    20     if (self=[super init])
    21     {
    22         self.name = n;
    23         self.magicNumber = m;
    24         self.shoeSize = ss;
    25         self.subThingies = [NSMutableArray array];
    26     }
    27     return (self);
    28 }
    29 
    30 -(void) dealloc
    31 {
    32     [name release];
    33     [subThingies release];
    34     [super dealloc];
    35 }
    36 
    37 //将对象编码(即:序列化)
    38 -(void) encodeWithCoder:(NSCoder *)aCoder
    39 {
    40     [aCoder encodeObject:name forKey:@"name"];
    41     [aCoder encodeInt:magicNumber forKey:@"magicNumber"];
    42     [aCoder    encodeFloat:shoeSize forKey:@"shoeSize"];
    43     [aCoder    encodeObject:subThingies forKey:@"subThingies"];
    44 }
    45 
    46 //将对象解码(反序列化)
    47 -(id) initWithCoder:(NSCoder *)aDecoder
    48 {
    49     if (self=[super init])
    50     {
    51         self.name = [aDecoder decodeObjectForKey:@"name"];
    52         self.magicNumber = [aDecoder decodeIntForKey:@"magicNumber"];
    53         self.shoeSize = [aDecoder decodeFloatForKey:@"shoeSize"];
    54         self.subThingies = [aDecoder decodeObjectForKey:@"subThingies"];
    55     }
    56     return (self);
    57     
    58 }
    59 
    60 
    61 -(NSString*) description
    62 {
    63     NSString *description = [NSString stringWithFormat:@"%@:%d/%.1f %@",name,magicNumber,shoeSize,subThingies];
    64     return (description);
    65 }
    66 
    67 @end

    使用模板

    NSString *path = [NSString stringWithFormat:@"%@/Documents/archive.dat", NSHomeDirectory()];
    Sample *s1 = [[Sample alloc] initWithName:@"thing1" magicNumber:42 shoeSize:10.5];    
    [s1.subThingies addObject:@"1"];  
    [s1.subThingies addObject:@"2"];  
    //序列化  
    NSData  *data1 = [NSKeyedArchiver archivedDataWithRootObject:s1];//将s1序列化后,保存到NSData中  
    [s1 release];  
    [data1 writeToFile:path atomically:YES];//持久化保存成物理文件  
    //反序列化  
    NSData *data2 = [NSData dataWithContentsOfFile:path];//读取文件   
    Sample *s2 = [NSKeyedUnarchiver unarchiveObjectWithData:data2];//反序列化     
    NSLog(@"%@",s2);  

    如果是多个这类对象组成的数组,序列化也很简单,只须对这个数组进行序列化

     1 Sample *s1 = [[Sample alloc] initWithName:@"thing1" magicNumber:42 shoeSize:10.5];  
     2 [s1.subThingies addObject:@"1"];  
     3 [s1.subThingies addObject:@"2"];  
     4      
     5 Sample *s2 = [[Sample alloc] initWithName:@"thing2" magicNumber:22 shoeSize:22.2];  
     6 [s2.subThingies addObject:@"22"];  
     7 [s2.subThingies addObject:@"22"];  
     8      
     9 NSArray *array = [NSArray arrayWithObjects:s1, s2, nil]; 
    10 [s1 release];
    11 [s2 release];
    12 
    13 NSString *path = [NSString stringWithFormat:@"%@/Documents/archive.dat", NSHomeDirectory()];
    14 //序列化  
    15 NSData  *data1 = [NSKeyedArchiver archivedDataWithRootObject:array];
    16 [data1 writeToFile:path atomically:YES];//持久化保存成物理文件  
    17 //房序列化  
    18 NSData *data2 = [NSData dataWithContentsOfFile:path];//读取文件  
    19 NSArray *array2 = [NSKeyedUnarchiver unarchiveObjectWithData:data2];//反序列化  
    20 NSLog(@"%@",array2); 
  • 相关阅读:
    用wamp配置的环境,想用CMD连接mysql怎么连
    Mysql删除表
    MySQL创建表
    Leetcode 130. Surrounded Regions
    Leetcode 111. Minimum Depth of Binary Tree
    Leetcode 110. Balanced Binary Tree
    Leetcode 98. Validate Binary Search Tree
    Leetcode 99. Recover Binary Search Tree
    Leetcode 108. Convert Sorted Array to Binary Search Tree
    Leetcode 105. Construct Binary Tree from Preorder and Inorder Traversal
  • 原文地址:https://www.cnblogs.com/PressII/p/3754446.html
Copyright © 2011-2022 走看看