我对如何正确制作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的属性发生变化。
答案 0 :(得分:1)
NSNumber
和NSString
都是不可变的;如果A的属性在将来发生变化,它将不会更改现有的NSNumber
和NSString
对象,它会替换它们。从这个角度来看,你的第一个例子就足够了。
事实上,如果您没有在垃圾收集下运行,那么您的第二个示例可能会泄漏内存,因为您永远不会发布A的属性的复制版本。