Давайте начнем с проблемы с памятью в первом цикле for. Есть перевыпуск:
NSArray *pics = [NSArray arrayWithObjects:image,imageHighlighted,nil];
[textures addObject:pics];
[pics release]; // <-- pics is overreleased since it is created autoreleased
Вторая проблема с памятью. coupleTexture
переиздан.
NSArray *coupleTexture = [textures objectAtIndex:randomTexture];
[textures removeObjectAtIndex:randomTexture];
//create the image array containing 1 couple + all other pictures
NSMutableArray *texturesBoard = [[NSMutableArray alloc] initWithCapacity:kNumPotatoes];
[texturesBoard addObject:coupleTexture];
[texturesBoard addObject:coupleTexture];
[coupleTexture release]; // <--- coupleTexture is autoreleased since it is returned by objectAtIndex: and not retained
Вы должны научиться делать быстрые перечисления. Это должно выглядеть так:
for (NSArray *pics in textures) {
[texturesBoard addObject:pics];
}
Больше проблем с памятью в масках цикла:
NSString *maskName = [NSString stringWithFormat:@"mask%d.png", i];
UIImage *mask = [UIImage imageNamed:maskName];
//NSArray *pics = [[NSArray alloc] initWithObjects:mask,nil];
[masks addObject:mask];
//[pics release];
[maskName release]; // <-- overreleased.. was created by stringWithFormat
[mask release]; // <-- overreleased.. same same
Следовательно, массив масок не освобождается ... а также массив списков, созданный сразу после цикла ...
О, мальчик. Здесь я должен остановиться, так как у меня тоже начинаются головные боли;) Вещи, которые вы должны выучить:
- Только
release
что вы создали с помощью init
или что вы retained
явно
- Правильно используйте быстрое перечисление
- Структурируйте ваш код ... Возможно, извлеките некоторые циклы for для разделения методов и отладьте их результаты отдельно.
Не расстраивайся. Продолжайте учиться:)