打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
IOS 序列化

IOS 序列化

(2013-11-07 17:10:15)
数据归档,保存到本地
1、基本数据归档由于都实现了nscoding协议
最简单的就是直接写入文件了

[self.bookarray writeToFile:[self filename] atomically:YES];

2、对象写入数组

对象没有实现nscoding协议,程序不知道如何编码/解码对象数据

所以对象要手动实现nscoding协议

-(void)encodeWithCoder:(NSCoder *)aCoder

{

    [aCoder encodeObject:self.bookname forKey:BOOK_NAME ];

    [aCoder encodeObject:self.author forKey:BOOK_AUTHOR];

    [aCoder encodeObject:self.bookpage forKey:BOOK_PAGE];

}

-(id)initWithCoder:(NSCoder *)aDecoder

{

    if (self=[super init])

    {

        self.bookname=[aDecoder decodeObjectForKey:BOOK_NAME];

        self.author=[aDecoder decodeObjectForKey:BOOK_AUTHOR];

        self.bookpage=[aDecoder decodeObjectForKey:BOOK_PAGE];

    }

    return self;

}

然后归档器来归档对象,保存其数据

 

序列化 :[NSKeyedArchiver archiveRootObject:book toFile:[self filename]];

 

反序列化:[NSKeyedUnarchiver unarchiveObjectWithFile:[self filename]];

3、当有多个不同对象,或者是对象数组需要本地存储的话

以上2种方法都不能实现

就需要用到NSMutableData

NSMutableData *data=[NSMutableData data];

 

        NSKeyedArchiver *archiver=[[NSKeyedArchiver alloc]initForWritingWithMutableData:data];

        [archiver encodeObject:self.bookarray forKey:@"bookarray"];

        [archiver finishEncoding];

        [data writeToFile:[self filename] atomically:YES];

        

        NSMutableData *getdata=[NSMutableData dataWithContentsOfFile:[self filename]];

        NSKeyedUnarchiver *unarchiver=[[NSKeyedUnarchiver alloc]initForReadingWithData:getdata];

        NSMutableArray *array=[unarchiver decodeObjectForKey:@"bookarray"];

        for (Book *id in array)

        {

            NSLog(@"%@",id.bookname);

        }

2、NSPropertyListSerialization 这个类只能对字典类的数据序列化

主要由2种方法

将字典数据存为Nsdata  序列化

[NSPropertyListSerialization dataWithPropertyList:[model dict] format:NSPropertyListBinaryFormat_v1_0 options:0 error:nil]

反序列化得到相应的字典数据

[NSPropertyListSerialization propertyListWithData:data

                                                    options:NSPropertyListImmutable

                                                     format:NULL

 

                                                      error:nil]

3、NSJSONSerialization  序列化

序列化为data

[NSJSONSerialization dataWithJSONObject:[model dict] options:0 error:nil]

反序列化

[NSJSONSerialization JSONObjectWithData:data options:0 error:nil]

以上3种,在对字典数据序列化的情况下,进行对比,有测试显示其序列化的速度 依次是NSJSONSerialization,NSPropertyListSerialization,NSKeyedArchive

 测试的Demo

https://github.com/randomsequence/NSserialisationTestsNSserialisationTests

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
ios归档与解档
iOS开发之APP USER对象存储归档
(1)归档、反归档的操作
IOS 序列化与反序列化 NSKeyedUnarchiver
【学习ios之路:UI系列】iOS沙盒机制,文件读取,归档与反归档
cocoa设计模式笔记
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服