iOS NSKeyedArchiver和NSKeyedUnarchiver

2021/5/18 18:55:36

本文主要是介绍iOS NSKeyedArchiver和NSKeyedUnarchiver,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

NSKeyedArchiverNSKeyedUnarchiver两个类把对象序列化和反序列化。

所有的序列化对象必须继承NSSecureCoding,例如NSStringNSArray

-(void) stringArchiver {
    NSData* data = [NSKeyedArchiver archivedDataWithRootObject:@"Hello World" requiringSecureCoding:YES error:nil];
    [data writeToFile:self.dataPath options:0 error:nil];
}

-(void) stringUnarchiver {
    NSData* data = [NSData dataWithContentsOfFile:self.dataPath options:0 error:nil];
    NSString* str = [NSKeyedUnarchiver unarchivedObjectOfClass:[NSString class] fromData:data error:nil];
        
    NSLog(@"%@", str);
}

自定义序列化对象Person同样需要继承NSSecureCoding,并实现initWithCoder:encodeWithCoder:supportsSecureCoding方法

// Person.h
@interface Person : NSObject<NSSecureCoding>

@property (nonatomic, copy) NSString* name;
@property (nonatomic, assign) NSInteger age;

@end

// Person.m
@implementation Person

- (instancetype)initWithCoder:(NSCoder *)aDecoder {
    self = [super init];
    if (self) {
        self.name = [aDecoder decodeObjectForKey:@"name"];
        self.age = [aDecoder decodeIntegerForKey:@"age"];
    }
    return self;
}

- (void)encodeWithCoder:(NSCoder *)aEncoder {
    [aEncoder encodeObject:self.name forKey:@"name"];
    [aEncoder encodeInteger:self.age forKey:@"age"];
}

+ (BOOL)supportsSecureCoding {
    return YES;
}

- (NSString *)description {
    return [NSString stringWithFormat:@"%@ - %ld", self.name, self.age];
}

@end

-(void) objectArchiver {
    Person* person = [[Person alloc] init];
    person.name = @"Jack";
    person.age = 18;
    
    NSData* data = [NSKeyedArchiver archivedDataWithRootObject:person requiringSecureCoding:YES error:nil];
    [data writeToFile:self.dataPath options:0 error:nil];
}

-(void) objectUnarchiver {
    NSData* data = [NSData dataWithContentsOfFile:self.dataPath options:0 error:nil];
    Person* person  = [NSKeyedUnarchiver unarchivedObjectOfClass:[Person class] fromData:data error:nil];
        
    NSLog(@"%@", person);
}


这篇关于iOS NSKeyedArchiver和NSKeyedUnarchiver的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程