2011-02-08 12 views
1

Core Dataオブジェクトのコピーを正しく作成する方法(リレーションシップではなく属性のみ)について少し混乱します。私がNSNumber xを持つオブジェクトAとNSStringを持っているとします。これをコピーするには、この正しい方法は次のとおりです。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]; 

私は将来的にはAの属性を更新した場合、私はBの属性が変更したくありません。

答えて

1

NSNumberNSStringはどちらも不変です。 Aの属性が将来変更された場合、既存のNSNumberおよびNSStringオブジェクトは変更されず、それらのオブジェクトに置き換えられます。その観点から、最初の例は完全に十分です。

実際には、コピーしたバージョンのAの属性を公開することはないため、ガベージコレクションを実行していない場合、2番目の例ではメモリがリークする可能性があります。

+0

これは私が疑ったことです。最初の例では実際の値ではなくポインタのみがコピーされることに心配していたと思います。私はそれがNSDateの場合にもうまくいくはずだと思いますか? –

関連する問題