2011-01-11 9 views
-1

これはメモリ管理の観点から正しいコードですか?目的C - Core-Dataを使用したリリース

NSEntityDescription *description = [NSEntityDescription 
             entityForName:@"Event" inManagedObjectContext:managedObjectContext]; 
NSFetchRequest *eventRequest = [[[NSFetchRequest alloc] init] autorelease]; 
[eventRequest setEntity:description]; 
[description release]; 

NSPredicate *eventPredicate = [NSPredicate predicateWithFormat: 
             @"(event == %@)", [item objectForKey:@"event"]]; 
[eventRequest setPredicate:eventPredicate]; 

または、私は説明とeventPredicateを解放する必要がありますか?

ありがとうございました

答えて

1

このコードを見ると、所有している唯一のオブジェクトはeventRequestです。自動リリースされているため、再度リリースする必要はありません。

名前付け規則に基づいて、他のすべてのオブジェクトは所有されていないので、それらを解放する必要はありません。

[description release];は、行の途中でクラッシュする可能性があります。

+0

次のコメントを読んでいると正しいと言われています。答えは分かりません。 – xger86x

+0

'description'は、「alloc」という単語を持つメソッドからあなたに与えられていないため、その名前に「コピー」、「保持する」または「新しい」と表示されます。 Cocoaの命名規則に従って、名前にこれらの単語が含まれていないメソッドは、オブジェクトへの参照を返すべきではありません(保持カウント+1)。あなたがこの文脈で心配している限り、あなたのオブジェクトは0の保持カウントを持ち、それを解放してはいけません。 – Jasarien

+0

私は正しい答えがわからないので、この質問をチェックしてください。ありがとう http://stackoverflow.com/questions/4659020/iphone-where-allocate-memory-for-datasource – xger86x

-1

あなたはそのコードのリリースを必要としません。理由を調べるには、Apple's documentationとお読みください。

+0

あなたの答えを明確にした後、私の投票を削除しました。 – Jasarien

関連する問題