При попытке повторно использовать существующий NSMutableArray (для экономии памяти) я получаю некоторые утечки (наблюдаемые инструментами).
По сути, я создаю NSMutableArray, заполняю его объектами (UIImages) и передаю его другому объекту, который его сохраняет. Однако теперь мне нужно снова использовать NSMutableArray. Я подумал, что я бы выпустил все его объекты, очистил его, и все было бы хорошо, но Instruments сообщает об утечке объекта CALayer (??) из того самого метода, который выглядит примерно так:
NSString *fileName;
NSMutableArray *arrayOfImages = [[NSMutableArray alloc] init];
// fill the array with images
for(int i = 0; i <= 7; i++) {
fileName = [NSString stringWithFormat:@"myImage_%d.png", i];
[arrayOfImages addObject:[UIImage imageNamed:fileName]];
}
// create a button with the array
aButton = [[CustomButtonClass buttonWithType:UIButtonTypeCustom]
initWithFrame:someFrame
imageArray:arrayOfImages];
// release its objects
for(int i = 0; i < [arrayOfImages count]; i++) {
[[arrayOfImages objectAtIndex:i] release];
}
// empty array
[arrayOfImages removeAllObjects];
// fill it with other images
for(int i = 0; i <= 7; i++) {
fileName = [NSString stringWithFormat:@"myOtherImage_%d.png", i];
[arrayOfImages addObject:[UIImage imageNamed:fileName]];
}
// create another button with other images (same array)
aSecondButton = [[CustomButtonClass buttonWithType:UIButtonTypeCustom]
initWithFrame:someFrame
imageArray:arrayOfImages];
[arrayOfImages release];
Для ясности мой метод инициализации кнопки выглядит следующим образом:
- (id)initWithFrame:(CGRect)frame
images:(NSArray *)imageArray
{
if(self = [super initWithFrame:frame]) {
myImageArray = [[NSArray arrayWithArray:imageArray] retain];
}
return self;
}
Я знаю, что могу просто создать новый NSMutableArray и покончить с этой проблемой, но меня раздражает невозможность повторного использования старого массива. В чем может быть проблема?