正确复制Core Data对象

时间:2011-02-08 22:51:39

标签: objective-c core-data

我对如何正确制作Core Data对象的副本(只是属性,而不是关系)感到困惑。假设我有我的对象A,带有NSNumber x和NSString s。这是复制这个的正确方法:

MyObject* B = (MyObject*)[NSEntityDescription insertNewObjectForEntityForName:@"MyObject" inManagedObjectContext:moc];
B.x = A.x;
B.s = A.s;

或者这个:

MyObject* B = (MyObject*)[NSEntityDescription insertNewObjectForEntityForName:@"MyObject" inManagedObjectContext:moc];
B.x = [A.x copy];
B.s = [A.s copy];

如果我将来更新A的属性,我不希望B的属性发生变化。

1 个答案:

答案 0 :(得分:1)

NSNumberNSString都是不可变的;如果A的属性在将来发生变化,它将不会更改现有的NSNumberNSString对象,它会替换它们。从这个角度来看,你的第一个例子就足够了。

事实上,如果您没有在垃圾收集下运行,那么您的第二个示例可能会泄漏内存,因为您永远不会发布A的属性的复制版本。