1

NSCoding 和 NSCopying 在底层的真正区别是什么?

另外,它们应该独立使用,一起使用还是什么时候使用哪个好?

4

3 回答 3

9
  • NSCopying 最接近于其他语言中clone()的名称,也就是说,它用于立即创建(功能性)新对象作为现有对象的复本。

  • NSCoding 最接近serialize()/deserialize,也就是说,它用于将对象转换为可以持久存储并在以后恢复的形式,可能在其他时间重新启动程序时。

如您所见,它们在功能上并不是很相似,并且肯定应该能够独立使用。

于 2013-01-16T22:22:43.193 回答
2

虽然他们都创建了相关对象的副本,但他们以非常不同的方式进行操作。

协议实际上只是实现一组特定功能的承诺。在 NSCopying 的情况下,它是-copyWithZone:,在 NSCoding 的情况下,它是–initWithCoder:and -encodeWithCoder:

NSCopying 用于制作对象的内存副本 - 另一个相同的对象。

NSCoding 用于创建序列化表示 - NSData 对象 - 或从这样的表示创建对象。

于 2013-01-16T22:22:53.567 回答
1

NSCoding 是关于将对象序列化到磁盘。

NSCopying 是关于可复制的(在内存中)。

于 2013-01-16T22:22:57.653 回答