2011-02-08 35 views
1

我對如何正確創建核心數據對象的副本(只是屬性,而不是關係)感到有點困惑。假設我有我的對象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]; 

如果我更新,在未來的屬性,我不希望B的屬性改變。

回答

1

NSNumberNSString都是不可變的;如果將來A的屬性發生變化,它不會更改現有的NSNumberNSString對象,它會替換它們。從這個角度來看,你的第一個例子就足夠了。

事實上,如果你沒有在垃圾回收下運行,你的第二個例子可能會泄漏內存,因爲你永遠不會釋放你的A屬性的複製版本。

+0

這就是我懷疑 - 我想我擔心第一個例子只會複製指針,而不是實際值。我猜那對NSDate來說應該還好吧? – 2011-02-09 00:17:09