NSCoding和NSCopying在低级别上有什么真正的区别?
另外,它们应该是独立使用,还是什么时候使用哪一种?
答案 0 :(得分:9)
NSCopying最接近于其他语言clone()
,也就是说,它用于立即创建(功能性)新对象作为现有对象的副本。
NSCoding最接近serialize()/deserialize
,也就是说,它用于将对象转换为可以持久存储并稍后恢复的形式,可能是在其他时间重新启动程序时。
正如您所看到的,它们在功能上并不十分相似,并且绝对应该能够独立使用。
答案 1 :(得分:2)
虽然他们都创建了相关对象的副本,但他们以非常不同的方式进行创作。
协议实际上只是实现一组特定功能的承诺。如果是NSCopying,则为-copyWithZone:
,如果是NSCoding,则为–initWithCoder:
和-encodeWithCoder:
。
NSCopying用于制作对象的内存副本 - 另一个相同的对象。
NSCoding用于创建序列化表示 - NSData对象 - 或者从这种表示创建对象。
答案 2 :(得分:1)
NSCoding是关于将对象序列化为光盘。
NSCopying是关于可复制的(在内存中)。