How to make NSManagedObject NSString properties be with “copy” instead of “retain”?
默认情况下,当从数据模型创建nsmanagedObject子类文件时,核心数据为字符串类型的列创建nsstring类型(非原子、保留)的属性。出于性能考虑,我可能会这样做,但是,我正在实现数据映射器模式,其中核心数据nsmanagedObject子类与模型类分离。因此,当将模型类转换为核心数据NSnMaultDead对象子类时,保留只分配指针而不是复制。从体系结构的角度来看,它阻碍了核心数据访问和模型类之间的逻辑分离,因此我需要使用复制而不是保留。
唯一的方法是手动更改nsmanagedObject子类中的属性吗?
- 以防万一你没有意识到这一点——一个正常(不可变)的copy方法NSString返回相同的实例,所以不要担心你的复制属性在测试时实际上没有复制任何东西。
- 是的,我知道,已经测试过了。"复制"仅复制可变类型对象"。另外,值得注意的是,"copy"属性还将复制消息发送到nsarray元素,因此如果数组中存在可变字符串,则会复制可变字符串。
- 请看我在回答下面的评论。今天,试图找出"复制"属性的实际用法。我知道它们是如何工作的,只是从来没有必要使用非可变字符串,所以在我的经验中复制是多余的,只是为了将来的保护。
唯一的方法是更改nsmanagedObject子类中属性的声明。值得庆幸的是,核心数据随后会自动处理其余部分。
- 在开发过程中,一些实体很可能会在核心数据模型模式中发生更改,因此重新生成nsmanagedObjects将覆盖已编辑的属性以"保留"。所以,有点不方便。
- 另外,我想分享我对"复制"属性的想法。属性阻止从外部更改nsmutableString属性的值。没有可变的nsnumber和nsdate,所以"copy"只影响字符串。然而,根据我在iOS应用程序开发的第二年,我从来没有需要使用nsmutableString,因此"copy"案例非常罕见imho:)苹果鼓励在其示例中使用nsstring属性上的copy,但在数组、字典和集合上使用"retain",尽管存在相同的覆盖案例(请参见我在问题下面的第一条评论)。有点缺乏一条规则…
- @百夫长发电机。它将代码分为生成的类和该类的子类;您可以编辑子类而不覆盖更改。