2010-11-29 10 views
0

CoreDataからフェッチされたNSMutableArrayを返す関数があります。私は、この関数を含む私のプロジェクトをBuild and AnalyzeときiPhone iOS CoreDataから関数を使用してNSMutableArrayを取得

- (NSMutableArray*)getArray:(NSString*)entityName withDescriptor:(NSString*)descriptorKey { 
    NSError **error = nil; 
    NSEntityDescription *entityDescription = [NSEntityDescription entityForName:entityName inManagedObjectContext:managedObjectContext]; 
    NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease]; 
    [request setEntity:entityDescription]; 

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:descriptorKey ascending:YES]; 
    [request setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]]; 
    [sortDescriptor release]; 

    return [[managedObjectContext executeFetchRequest:request error:error] mutableCopy]; 
} 

は、私はラインで割り当てられたオブジェクトの潜在的な漏れがあることを言って解析結果を得るX(これは変更可能なコピーを返すところのラインがある)

私はこのように、この関数を呼び出しています:myArrayはクラスのNSMutableArrayのプロパティで、ENTITY_PAGESDEFAULT_DESCRIPTORは定数をNSStringのいる

myArray = [self getArray:ENTITY_PAGES withDescriptor:DEFAULT_DESCRIPTOR]; 

私はこの機能を複数の場所で使いたいので、プロジェクトの冗長性を減らすことができます。

myArrayからCore Dataにこれらのアナライザの問題を起こすことなく、どのように入力する必要がありますか?あなたの関数は、1 Objective-Cのメモリ管理規則に違反しているため

答えて

2

アナライザは、潜在的なメモリリークについて不平を言っている:

あなたは、名前のalloc「で始まるメソッドを使用して、それを作成する場合は、オブジェクトの所有権を取得します(例えば、alloc、newObject、またはmutableCopy)を含んでいるか、または保持メッセージを送信した場合は、それを保持します。

関数の名前を適切に変更してください(ある点で返された配列が確実に解放されていることを確認してください)。ここで

は、メモリ管理ガイドへのリンクです:

http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html

+0

私は '' mutableCopy'とアナライザは文句を言わなかった後autorelease'を追加しました。私はあなたが「あなたの関数の名前を適切に変更する」という意味を知らない。何が適切なのか教えてくれないか? ha – binnyb

+0

関数が配列のコピーを返すようにするには、メモリ管理規則に従って関数の名前を付ける必要があります。名前は "alloc"、 "new"、または "copy"で始まる必要があります。 –

+0

もう少し明確にすべきです。元の例では、関数の呼び出し元が返されたオブジェクト(配列の可変コピー)の所有権を取得しており、それを解放する必要があります。この場合、関数に適切な名前を付ける必要があります。 –

関連する問題