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_PAGES
とDEFAULT_DESCRIPTOR
は定数をNSStringのいる
myArray = [self getArray:ENTITY_PAGES withDescriptor:DEFAULT_DESCRIPTOR];
私はこの機能を複数の場所で使いたいので、プロジェクトの冗長性を減らすことができます。
myArray
からCore Data
にこれらのアナライザの問題を起こすことなく、どのように入力する必要がありますか?あなたの関数は、1 Objective-Cのメモリ管理規則に違反しているため
私は '' mutableCopy'とアナライザは文句を言わなかった後autorelease'を追加しました。私はあなたが「あなたの関数の名前を適切に変更する」という意味を知らない。何が適切なのか教えてくれないか? ha – binnyb
関数が配列のコピーを返すようにするには、メモリ管理規則に従って関数の名前を付ける必要があります。名前は "alloc"、 "new"、または "copy"で始まる必要があります。 –
もう少し明確にすべきです。元の例では、関数の呼び出し元が返されたオブジェクト(配列の可変コピー)の所有権を取得しており、それを解放する必要があります。この場合、関数に適切な名前を付ける必要があります。 –