私のコードはここでメモリリークを示している:それはあるので
NSMutableArray* newImageArray = [[NSMutableArray alloc] init];
NSMutableArray* newMediaArray = [[NSMutableArray alloc] init];
if (self.categoryIndex == 0) {
for (int i=1; i < [categoryArray count]; i++)
{
newImageArray = [NSMutableArray arrayWithArray:[newImageArray arrayByAddingObjectsFromArray:[self getImageArrayByCategoryIndex:i]]];
}
}
else {
newImageArray = [self getImageArrayByCategoryIndex:self.categoryIndex];
}
for (int i=0; i < [newImageArray count]; i++)
{
Media* media = [[Media alloc] init];
NSString* imageFile = [newImageArray objectAtIndex: i];
media.imageFile = [UIImage imageNamed:imageFile];
media.imageLabel = [[imageFile lastPathComponent] stringByDeletingPathExtension];
media.soundFile = [appFolderPath stringByAppendingString:[[[imageFile stringByDeletingPathExtension] stringByAppendingString: @".wav"] stringByReplacingOccurrencesOfString: IMAGES_FOLDER withString: SOUNDS_FOLDER]];
[newMediaArray addObject:media];
}
self.mediaArray = newMediaArray;
[self setNextMediaIndex];
私はメディアを解放していないですnewMediaArray(私の主なオブジェクトであるmediaArrayによって使用される)によって使用されています。私の主な目的を解放すると、すべてが解放されるべきではありませんか?
ようこそ読まなければならないほとんどです。なぜユーザー名を選んで自分を快適にしてみませんか?また、このコードを他の質問の編集として投稿してください。 – Moshe
'if'ブランチでは、元の' newImageArray'にオブジェクトを追加するのではなく、 'for'ループの各反復で完全に別の配列に置き換えて、元の配列を漏れさせます(他は自動解放されます)。おそらく '[newImageArray addObjectsFromArray:...];'が必要です。 'else'ブランチは、別の配列を割り当てているので元の配列もリークします。 2回目の 'for'では、繰り返しごとに' Media'オブジェクトをリークします。 'self.mediaArray = newMediaArray;の後に' newMediaArray'も解放しません。 – albertamg