> For the complete documentation index, see [llms.txt](https://coderiding.gitbook.io/dgjj/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://coderiding.gitbook.io/dgjj/hu-lian-wang-gai-nian/qian-duan/ios/jie-shao-nscoding-xie-yi-he-nscopying-xie-yi.md).

# 介绍NSCoding协议和NSCopying协议

coderiding的总结： 1.实现了这个协议，才能对数据解码和编码

1.NSCoding是一个你需要在数据类上要实现的协议以支持数据类和数据流间的编码和解码。数据流可以持久化到硬盘。&#x20;

2.Cocoa Touch类都遵循NSCoding协议(除UIImage)&#x20;

3.需要实现两个方法: encodeWithCoder和initWithEncoder。encodeWithCoder就是编码，initWithCoder就是解码。

```
- (void)encodeWithCoder:(NSCoder *)aCoder{
    [super encodeWithCoder:aCoder];
    [aCoder encodeObject:foo forKey:kFooKey];
    [aCoder encodeObject:bar forKey:kBarKey];
    [aCoder encodeInt:someInt forKey:kSomeIntKey];
    [aCoder encodeFloat:someFloat forKey:kSomeFloat];
}

- (instancetype)initWithCoder:(NSCoder *)aDecoder{
    if (self = [super initWithCoder:aDecoder]) {
        foo = [aDecoder decodeObjectForKey:kFooKey];
        bar = [aDecoder decodeObjectForKey:kBarKey];
        someInt = [aDecoder decodeObjectForKey:kSomeIntKey];
        someFloat = [aDecoder decodeObjectForKey:kAgeKey];
    }
    return self;
}
```

1.NSCopying协议允许复制对象，这使你在使用数据模型对象时具备了较大的灵活性
