cocoa - 不使用现有 NSCoding 方法来实现 NSCopying 的任何理由

标签 cocoa cocoa-touch nscoding nscopying

给定一个实现 NSCoding 的类,是否有理由不应该使用此模式来实现 copyWithZone: 的实现:

-(instancetype)copyWithZone:(NSZone *)zone{
    return [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:self]];
}

最佳答案

只是效率 - 编码/解码成本和总内存占用。

假设您有一个带有四个不可变实例变量的对象。如果您实现自定义copy,那么您将分配该对象的一个​​额外实例,然后赋予它所有四个实例变量的所有权。

如果您对其进行编码和解码,则会产生双向序列化的处理成本,并且最终会得到每个实例变量的新副本。

关于cocoa - 不使用现有 NSCoding 方法来实现 NSCopying 的任何理由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26372847/

相关文章:

ios - 对于 iOS,将 ViewController.xib 自定义类更改为另一个类意味着什么?

iphone - 漂亮的 UIButton

ios - 如何在 Swift 中的 NSCoding 初始化时返回预先存在的核心数据对象?

Objective-c - initWithCoder 和内存管理?

xcode - NSTabView 在 Interface Builder 中带有重复的按钮?

cocoa-touch - 使用 NSSortDescriptor 对 NSOrderedSet 进行排序

objective-c - 在类方法中访问同一类实例的 ivar

ios - 使用 NSCoding Swift 保存对象时出现异常

objective-c - 是否可以根据修改键更改 NSOpenPanel 的提示

macos - 使用 Swift 中的 AudioToolbox 访问 OS X 主音量