• 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); 
  • 相关阅读:
    three.js-texture
    three.js-binary operator
    three.js-model
    three.js-bone
    JS时间戳
    JQUERY删除操作
    Synchronized和Static Synchronized区别
    JQUERY 保存成功后又下角动态提示
    jquery from提交和post提交
    防止多次领取红包进行ID锁
  • 原文地址:https://www.cnblogs.com/PressII/p/3754446.html
Copyright © 2020-2023  润新知