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