NSCoding VS NSCopying

时间:2013-01-16 22:15:38

标签: objective-c nscoding nscopying

NSCoding和NSCopying在低级别上有什么真正的区别?

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

3 个答案:

答案 0 :(得分:9)

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

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

正如您所看到的,它们在功能上并不十分相似,并且绝对应该能够独立使用。

答案 1 :(得分:2)

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

协议实际上只是实现一组特定功能的承诺。如果是NSCopying,则为-copyWithZone:,如果是NSCoding,则为–initWithCoder:-encodeWithCoder:

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

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

答案 2 :(得分:1)

NSCoding是关于将对象序列化为光盘。

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