私のオブジェクトにはプライベートNSMutableArray項目があります。私は、サイズ順にアイテムにオブジェクトを並べ替えるには、次のコードを使用しています:NSMutableArrayメモリリークを並べ替えます
-(void)sortItems{
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"size" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSArray *sortedArray = [items sortedArrayUsingDescriptors:sortDescriptors];
NSMutableArray* newArray = [[NSMutableArray alloc] initWithArray: sortedArray];
[self setItems:newArray];
[sortDescriptor release];
}
を私がSortItemsのを呼び出すたびに、私は新しいメモリをallocingと割り当てていますので、明らかにこれは、ここではメモリリークでありますそれを指す項目。私は次のように古いメモリを解放しようとしました:
NSMutableArray* newArray = [[NSMutableArray alloc] initWithArray: sortedArray];
NSMutableArray* oldArray = [self items];
[self setItems:newArray];
[oldArray release];
しかし、EXC_BAD_ACCESSエラーが発生します。私はobjCのメモリ処理について読んできました。私はここで根本的に何か間違っていると確信しています。
ご協力いただければ幸いです!
'setItems'メソッドの実装/宣言を表示します。それは、 'newArray'を保持していなければなりません。それは' newArray release 'を呼び出す直後に必要なことを意味します。 – trojanfoe
現在の項目はプロパティです: @property(非構造体、代入)NSMutableArray * items;私はいつプロパティフラグで '保持'を使用するかを読む必要があると思います! – JimmyB