iOS SDK详解之NSCoding协议

原创blog,转载请注明出处

http://blog.csdn.net/hello_hwc?viewmode=contents

欢迎关注我的iOS SDK详解专栏

http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html



前言:NSCoding是对iOS中的Model类进行编码和解码必须要遵循的协议,如果一个对象要被归档,那么这个协议是必须的。


NSCoding要实现两个方法

- initWithCoder: //解码
- encodeWithCoder://编码


一个简单的例子:

  • 定义一个Model,让其遵循NSCoding协议,方便我们进行归档数据存储(直接到plist或者NSUserdefaults)

OC

@interface MyModel:NSObject<NSCoding>
@property (copy,nonatomic)NSString * name;
@property (nonatomic)int age;
@end

@implementation MyModel

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

-(void)encodeWithCoder:(NSCoder *)aCoder{
    [aCoder encodeObject:self.name forKey:@"kName"];
    [aCoder encodeInt32:self.age forKey:@"kAge"];
}
-(NSString *)description{
    return [NSString stringWithFormat:@"Name:%@; Age:%d",self.name,self.age];
}

然后这样调用

    [super viewDidLoad];
    MyModel * model = [[MyModel alloc] init];
    model.name = @"wenchen";
    model.age = 24;
    NSData * data = [NSKeyedArchiver archivedDataWithRootObject:model];
    MyModel * unarchedModel = [NSKeyedUnarchiver unarchiveObjectWithData:data];
    NSLog(@"%@",unarchedModel); //Name:wenchen; Age:24

为什么要写description呢?因为方便调试



Swift实现

class  MyModel:NSObject,NSCoding {
    var name:String
    var age:Int32
    init(name:String,age:Int32){
        self.name = name
        self.age = age
        super.init()
    }
    required init(coder aDecoder: NSCoder) {
        self.name = aDecoder.decodeObjectForKey("kName") as! String
        self.age = aDecoder.decodeIntForKey("kAge")

    }
    func encodeWithCoder(aCoder: NSCoder) {
        aCoder.encodeObject(self.name, forKey: "kName")
        aCoder.encodeInt(self.age, forKey: "kAge")
    }
}

调用

  let model = MyModel(name: "Wenchen", age: 24)
  let data = NSKeyedArchiver.archivedDataWithRootObject(model)
  let unArchedModel = NSKeyedUnarchiver.unarchiveObjectWithData(data) as! MyModel
  println("Name:\(unArchedModel.name); Age:\(unArchedModel.age)")

版权声明:本文为博主原创文章,如需转载请注明出处

时间: 2024-08-02 11:04:24

iOS SDK详解之NSCoding协议的相关文章

iOS SDK详解之NSScanner-分析String

原创blog,转载请注明出处 blog.csdn.net/hello_hwc 欢迎关注我的iOS SDK详解专栏,这里有很多基础的文章 http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html 前言:NSScanner是分析String,把String转为substring和数字的很好的工具.它使用一个NSString初始化,使用的时候通常从开头处扫描直到结尾. 本文会先举出两个例子,然后详细的讲解NSScanner的方法.源码是

IOS SDK详解

来源:http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html?page=1#42803301 博客专栏>移动开发专栏>IOS SDK详解 分享到:新浪微博腾讯微博IOS SDK详解 本专栏从IOS SDK中常用的Framework出发,继而深入的介绍各个Framework.每个Framework博主都会进行Demo 收藏 订阅 最新更新文章 [移动开发] IOS SDK详解之CALayer(二) 原创Blog,转载请注明出处

iOS SDK详解之IBInspectable和IB_DESIGNABLE-Storyboad动态刷新

原创Blog,转载请注明出处 blog.csdn.net/hello_hwc 欢迎关注我的iOS-SDK详解专栏,在这里你能找到很多iOS开发基础的文章 http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html 前言: 在做应用的UI设计的时候,如果属性能够在Interface Builder的图形化界面进行设置,并且动态的预览到效果,那样无疑会大大提高应用的开发效率.而XCode为我们提供了这样的一种方式,就是使用IBInspe

iOS SDK详解之NSCalendar &amp; NSDate?Components

原创Blog,转载请注明出处 blog.csdn.net/hello_hwc 欢饮关注我的iOS SDK详解专栏 http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html 前言:NSCalendar 和 NSDate?Components是有关iOS 时间相关API很重要的两个类.最近刚好用到,这里就整理下. 概念 NSCalendar 顾名思义就是日历,封装了系统如何按照年月日的方式来组织时间,组织时间的方式和地区,时区有很大关

IOS SDK详解之KVC

原创Blog,转载请注明出处 blog.csdn.net/hello_hwc 前言:本文的架构 KVC的定义 KVC的几个场景 希望,通过本文让不了解KVC的同学入门,KVC在IOS开发中是个比较重要的概念,也是理解KVO的基础. 一 KVC的定义 KVC的全称是key-value coding,通过key-value的方式来访问属性.在很多地方,KVC是非常方便的. 属性 @property (strong,nonatomic) NSString * message; 赋值 [self set

IOS SDK详解之NSDictionary

原创Blog,转载请注明出处 blog.csdn.net/hello_hwc 前言:本文将要讲述的内容有 1.NSDictionary 以及 NSMutableDictionary 概述 2.常用属性方法举例(不常用的本文不会涉及) 一 NSDictionary/NSMutableDictionary概述 NSDictionary提供了一种key-value的数据存储方式.总的来说,任何对象都可以作为key,只要其遵循NSCopying协议.其中,key不能相同(由isEqual来判断).key

iOS SDK详解之模糊(毛玻璃)效果效果

原创blog,转载请注明出处 http://blog.csdn.net/hello_hwc?viewmode=list 前言: 在iOS 8 之前,想要实现模糊效果,一般会使用一些Github库,当然自己定制也可以,其原理就是用Core Image进行一些数字图像处理(因为电子出身,本课的时候做过,用矩阵来做).不过,到了iOS 8之后,这一切变的非常简单,因为Apple公开了之前的几个私有API. Demo效果 三种Blur Vibrancy(也就是在Blur上加一些想要强调的部分) Demo

IOS SDK详解之KVO

原创Blog,转载请注明出处 blog.csdn.net/hello_hwc 前言:KVC和KVO是帮助我们驾驭objective C动态特性工具.KVO是建立在KVC基础上的,所以不了解KVC的同学可以参见我的这篇博客.这里我不会再重复讲解KVC. http://blog.csdn.net/hello_hwc/article/details/43769765 本文的内容 KVO的定义 KVO的典型使用场景. 手动KVO 几点KVO要说的地方 一 KVO的定义 KVO提供了一种key-value

IOS SDK详解之沙盒(一)图解+小工具

原创Blog,转载请注明出处 blog.csdn.net/hello_hwc 前言: IOS沙盒机制限制了App的访问权限,进而保护用户的数据信息. 一 查看沙盒结构 和一些百度来的博客显示隐藏稳文件的方式不同,本文也提供两种方式,简单粗暴. 方式一 使用工具simpholders(推荐) 下载链接 http://simpholders.com/ 效果如图 方式二 直接使用代码 用以下代码,log出documents/路径 NSURL * url = [[[NSFileManager defau