我正在阅读“核心数据编程指南”。它包含以下文本:
但是,您必须以符合 KVC 的方式更改属性值。例如,以下通常表示编程错误:
NSMutableString *mutableString = [NSMutableString stringWithString:@"Stig"];
[newEmployee setFirstName:mutableString];
[mutableString setString:@"Laura"];
对于可变值,您应该将值的所有权转移给 Core Data,或者实现自定义访问器方法以始终执行复制。如果表示 Employee 实体的类声明了 firstName 属性(副本)(或实现了复制新值的自定义 setFirstName: 方法),则前面的示例可能不会表示错误。在这种情况下,调用 setString: 之后(在第三行代码中)firstName 的值仍然是“Stig”而不是“Laura”。
关于文本的问题:“在这种情况下”是哪种情况 - 属性被声明为“副本”或不是?
关于复制和编程实践的问题:从我在这里读到的内容: NSString 属性:复制还是保留? 我明白
- 使用 copy 将确保 firstName 是“Stig”,而不是 Laura
- 这样做是明智的,因为“在几乎所有情况下,您都希望防止在其背后改变对象的属性”
我真的很想知道上面引用的文字试图在 Core Data 的上下文中告诉我们什么。无论是否使用 Core Data,我们都必须使用“复制”。另外,如果有人能对上面的“2”点(这是明智的......)进行更多说明,我会很高兴,因为在其背后改变对象的属性会产生什么后果?