美文网首页
[OC基础]对象序列化

[OC基础]对象序列化

作者: zhulang424 | 来源:发表于2017-08-01 20:56 被阅读102次

Foundation对象 <-> 文件

  • NSArray
        NSArray *array = @[@1,@2,@3];
        [array writeToFile:kFileAddress
                atomically:YES];
  • NSDictionary
        NSDictionary *dictionary = @{@"1" : @1 , @"2" : @2 , @"3" : @3};
        [dictionary writeToFile:kFileAddress
                     atomically:YES];
  • NSString
        NSString *string = @"hello world";
        [string writeToFile:kFileAddress
                 atomically:YES // 是否先将内容写入临时文件,成功后再将临时文件目标文件交换
                   encoding:NSUTF8StringEncoding
                      error:&writeToFileError];
        if (writeToFileError) {
            NSLog(@"%@",[writeToFileError localizedDescription]);
            writeToFileError = nil;
        }
  • NSData
        NSData *data = [[NSData alloc] init];
        [data writeToFile:kFileAddress
                  options:NSDataWritingAtomic // 先将内容写入临时文件,成功后再把临时文件和目标文件交换
                    error:&writeToFileError];
        if (writeToFileError) {
            NSLog(@"%@",[writeToFileError localizedDescription]);
            writeToFileError = nil;
        }

自定义对象 <-> NSData <->文件

  • 自定义类遵循 NSCoding 协议,实现 encodeWithCoder:和 initWithCoder:方法
- (void)encodeWithCoder:(NSCoder *)aCoder {
    
    [aCoder encodeObject:self.name forKey:kKeyForName];
    [aCoder encodeObject:self.phoneNumber forKey:kKeyForPhoneNumber];
}

- (instancetype)initWithCoder:(NSCoder *)aDecoder {
    
    self = [super init];
    if (self) {
        self.name = [aDecoder decodeObjectForKey:kKeyForName];
        self.phoneNumber = [aDecoder decodeObjectForKey:kKeyForPhoneNumber];
    }
    
    return self;
}
  • 用 NSCoder 子类 NSKeyedArchiver 和 NSKeyedUnarchiver
        // 将 ZWQPerson 对象写入文件
        ZWQPerson *personA = [[ZWQPerson alloc] initWithName:@"David" phoneNumber:@12345678912];
        
        NSError *writeToFileError = nil;
        
        NSData *dataOfZWQPersonA = [NSKeyedArchiver archivedDataWithRootObject:personA];
        [dataOfZWQPersonA writeToFile:kFileAddress
                             options:NSDataWritingAtomic
                               error:&writeToFileError];
        
        if (writeToFileError) {
            
            NSLog(@"%@",[writeToFileError localizedDescription]);
        }
        
        // 从文件中读取 ZWQPerson
        NSData *dataOfZWQPersonB = [NSData dataWithContentsOfFile:kFileAddress];
        ZWQPerson *personB = [NSKeyedUnarchiver unarchiveObjectWithData:dataOfZWQPersonB];
        
        NSLog(@"If personA is equal to personB?   %@", [personA isEqualToPerson:personB] ? @"YES" : @"NO" ); // 应该返回 YES

相关文章

  • iOS JSON 数据解析

    (1)JSON数据->OC对象(反序列化) (2)OC对象->JSON对象(序列化) (3)OC对象和JSON数据...

  • [OC基础]对象序列化

    Foundation对象 <-> 文件 NSArray NSDictionary NSString NSData ...

  • iOS归档和解档

    OC的序列化和反序列化就是用来存储对象和访问对象。序列化就是通过归档把对象转化成二进制文件。反序列化就是通过解档把...

  • 多线程网络-5

    Xmind ①发送请求拿到JSON数据后如何序列化(解析) ②如何把OC对象转换为JSON ③JSON数据和OC对...

  • JSON序列化的归纳整理

    JSON的序列化 (一)序列化和反序列化 序列化 : 将 字典或者数组等OC对象 转换成 二进制数据 准备发送给服...

  • IOS 对象的创建

    OC 中创建对象是基础的操作,但我们是否有了解过OC对象是怎么创建的,这篇文章就是从最基础的对象创建起,看一下OC...

  • 序列化与反序列化

    Java基础学习总结——Java对象的序列化和反序列化 一、序列化和反序列化的概念 把对象转换为字节序列的过程称为...

  • Java-序列化-反序列化

    Thanks Java基础学习总结——Java对象的序列化和反序列化java序列化反序列化原理Java 序列化的高...

  • Java序列化

    Java序列化的几种方式以及序列化的作用 Java基础学习总结——Java对象的序列化和反序列化

  • OC知识点整理-(零)内容概要

    我们在OC中基础中,尝尝会被问到下面几个基础方面的问题。 OC基础 Category 关联对象 代理,通知 KVO...

网友评论

      本文标题:[OC基础]对象序列化

      本文链接:https://www.haomeiwen.com/subject/rzibrttx.html