【iOS Tips】008-序列化与反序列化

本文介绍Objective-C中如何实现序列化与反序列化,通过User类演示了遵守NSCoding协议的方法来完成编码与解码过程,并展示了具体的数据存储与读取步骤。

序列化: 将数据结构或对象转换成二进制串的过程。这个过程叫做Archiving。二进制流可以通过网络或写入文件中。

反序列化:将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程。即为Unarchiving。

例子:有个类User,分别有三个属性。首先应遵守NSCoding协议,如下图所示。
1.实现<NSCoding>协议
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface User : NSObject<NSCoding>//遵守NSCoding协议

@property (nonatomic,strong)NSString *name;
@property (nonatomic,assign)NSInteger age;
@property (nonatomic,assign)CGPoint location;

@end

实现NSCoding协议方法,即实现编码/解码方法

#import "User.h"

@implementation User

//编码
- (void)encodeWithCoder:(NSCoder *)aCoder{
    [aCoder encodeObject:_name forKey:@"name"];
    [aCoder encodeInteger:_age forKey:@"age"];
    [aCoder encodeObject:NSStringFromCGPoint(_location) forKey:@"location"];
}

//解码
- (instancetype)initWithCoder:(NSCoder *)aDecoder{
    if (self = [super init]) {
        _name = [aDecoder decodeObjectForKey:@"name"];
        _age = [aDecoder decodeIntegerForKey:@"age"];
        _location = CGPointFromString([aDecoder decodeObjectForKey:@"location"]);
    }
    return self;
}

@end

2.序列化为二进制数据(转为NSData并存储)

User *user = [[User alloc]init];
user.name = @"xiaoming";
user.age = 18;
user.location = CGPointMake(100, 30);

//archive
NSData *data=[NSKeyedArchiver archivedDataWithRootObject:user];
//create path
NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];
path = [path stringByAppendingPathComponent:@"user.dat"];
//save
BOOL ret = [data writeToFile:path atomically:YES];

3.反序列化为对象(将NSData转化为对象模型)

User *user = [NSKeyedUnarchiver unarchiveObjectWithFile:path];

 

转载于:https://my.oschina.net/Misayalvyuan/blog/1863869

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值