CoreDataで一時的なManagedObjectを作る方法

2011/10/8 日常

CoreDataといえばデータを保存する手段であると同時に、MVCのMであるモデル構造を作るのに使われます。 しかし、モデル構造を持つ全てのデータが保存したいかと言われるとそうではありません。 たとえば、webから一時的にデータを持ってきて、そのなかからお気に入りのものだけ実際に保存するとかいうこともあるでしょう。それのためにいちいち保存していたら保存に使う時間も、CPUのリソースももったいないです。 というわけで、CoreDataで保存しない一時的なManagedObjectを作る方法を紹介します。 ※保存しない分、時間とCPUの節約にはなりますが、メモリの節約にはなりません。 大量のデータを使うときは保存することでメモリを節約したほうがいいかもしれません。

CoreDataで保存しない一時的なManagedObjectを作る方法

CoreDataではManagedObjectContextにsaveメソッドがあります。 つまり、ManagedObjectContextがなければ保存できないんです。 というわけで、ManagedObjectContextがnilのManagedObjectの作り方です。 ManagedObjectContextを使わないといっても、作るときは少しだけ使います。

 - (id)objectForTemp{ NSManagedObject \*obj; NSManagedObjectContext \*context = self.managedObjectContext; NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Book" inManagedObjectContext:context]; obj = [[[Book alloc] initWithEntity:entityDescription insertIntoManagedObjectContext:nil] autorelease]; return obj; } 

たったの8行です。 BookというのはNSManagedObjectのサブクラスで、CoreDataから自動生成されるやつです。 重要なのは最後の

[[Book alloc] initWithEntity:entityDescription insertIntoManagedObjectContext:nil]

で、ここでManagedObjectContextをnilにすることで、メモリ内だけにとどまるmanagedObjectを作ることになります。 また、managedObjectContextを使わないので、この方法で作ったmanagedObjectはmanageされないで、自分のタイミングでreleaseされます。 すこしだけ使い方が違うのに注意してください。

img_show