【发布时间】:2013-01-16 22:15:38
【问题描述】:
NSCoding 和 NSCopying 在底层的真正区别是什么?
另外,它们应该单独使用,一起使用还是什么时候使用哪个好?
【问题讨论】:
标签: objective-c nscoding nscopying
NSCoding 和 NSCopying 在底层的真正区别是什么?
另外,它们应该单独使用,一起使用还是什么时候使用哪个好?
【问题讨论】:
标签: objective-c nscoding nscopying
NSCopying 最接近于其他语言中称为clone() 的内容,也就是说,它用于立即创建(功能性)新对象作为现有对象的抄本。
NSCoding 最接近serialize()/deserialize,也就是说,它用于将对象转换为可以持久存储并在以后恢复的形式,可能在其他时间重新启动程序时。
如您所见,它们在功能上并不是很相似,而且肯定可以独立使用。
【讨论】:
虽然他们都创建了相关对象的副本,但他们以非常不同的方式进行操作。
协议实际上只是实现一组特定功能的承诺。在 NSCopying 的情况下,它是 -copyWithZone:,在 NSCoding 的情况下,它是 –initWithCoder: 和 -encodeWithCoder:。
NSCopying 用于制作对象的内存副本 - 另一个相同的对象。
NSCoding 用于创建序列化表示 - NSData 对象 - 或从这样的表示创建对象。
【讨论】:
NSCoding 是关于将对象序列化到磁盘。
NSCopying 是关于可复制(在内存中)。
【讨论】: