2011-02-08 4 views
1

Я немного смущен тем, как правильно сделать копию объекта Core Data (просто атрибуты, а не отношения). Скажем, что у меня есть объект A, с NSNumber x и NSString s. Является ли это правильный способ скопировать этот:Корректно скопировать объект Core Data

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

И NSNumber и NSString неизменяемы; если бы атрибуты А изменились в будущем, это не изменило бы существующие объекты NSNumber и NSString, они заменили бы их. С этой точки зрения ваш первый пример вполне достаточен.

Фактически, ваш второй пример, скорее всего, приведет к утечке памяти, если вы не работаете под сборкой мусора, поскольку вы никогда не выпускаете скопированные версии атрибутов A.

+0

Это то, что я подозревал. Думаю, я был обеспокоен тем, что первый пример будет копировать указатели, а не фактическое значение. Думаю, для NSDate тоже должно быть хорошо, а? –

Смежные вопросы