【发布时间】:2012-07-09 20:11:50
【问题描述】:
默认情况下,从数据模型创建 NSManagedObject 子类文件时,Core Data 会为字符串类型的列创建 NSString(非原子,保留)类型的属性。出于性能考虑,我可能会完成,但是,我正在实现数据映射器模式,其中核心数据 NSManagedObject 子类与模型类分开。因此,在将模型类转换为核心数据 NSManagedObject 子类时,retain 只是分配一个指针而不是一个副本。从架构的角度来看,它打破了核心数据访问和模型类之间的逻辑分离,所以我需要使用复制而不是保留。
唯一的方法是手动更改 NSManagedObject 子类中的属性吗?
【问题讨论】:
-
以防万一您不知道这一点 - 普通(非可变)
NSString的copy方法返回相同的实例,所以不要惊慌您的复制属性不会测试时实际上不会复制任何内容。 -
是的,我知道,已经测试过了。 “复制”仅复制可变类型对象。另外,值得注意的是,“copy”属性也会向 NSArray 元素发送复制消息,因此如果数组中存在可变字符串,则将被复制。
-
请看我在答案下方的评论。今天,试图弄清楚“复制”属性的实际用法。我了解它们是如何工作的,只是从来不需要使用 NSMutableString,所以根据我的经验复制是多余的,只是为了将来的保护。
标签: iphone objective-c core-data