我的代碼是在這裏展示了內存泄漏:
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使用,它用於我的主要對象)。當我釋放我的主要對象時,是不是應該釋放所有東西?
歡迎StackOverflow上。爲什麼不選擇用戶名並讓自己舒服?此外,只需將此代碼發佈爲另一個問題的編輯。 – Moshe
在'if'分支中,你不是將對象添加到原始'newImageArray'中,而是在'for'循環的每次迭代中完全用另一個數組替換它,從而泄漏原始數組(其他的是自動釋放的)。你可能想要'[newImageArray addObjectsFromArray:...];'。自從您分配一個不同的數組後,'else'分支也會泄漏原始數組。在第二個'for'中,你在每次迭代中泄漏'Media'對象。在'self.mediaArray = newMediaArray;'之後''你也不會釋放'newMediaArray'。 – albertamg