Я не думаю, что UIImagePickerControllers предназначены для повторного использования. В любом случае, они используют ТОННУ памяти (особенно камеры), поэтому вы не хотите хранить их дольше, чем нужно. Так что да, вы должны освободить средство выбора изображений, когда закончите с ним, и создать новое, когда вы хотите добавить другое изображение.
Вероятно, вы должны представлять свой сборщик изображений модально:
[self presentModalViewController:imagePickerController animated:YES];
Вам не нужно отпускать изображение. Просмотр изображения каждый раз, когда вы хотите изменить изображение. Просто измените свойство изображения.
pictureA.image = newImage;
Если вы хотите создать экземпляр представления изображения при первом его использовании, сделайте что-то вроде
if (!pictureA) {
pictureA = [[UIImageView alloc] initWithFrame:aFrame];
}
pictureA.image = ...
Имейте в виду, что для вызова alloc требуется соответствующий вызов либо для освобождения, либо для автоматического выпуска. Когда вы выделили «pictureA» выше, его счетчик сохранения стал 1. вызывая «[self addSubview: pictureA];» увеличил количество сохраняемых файлов до 2. Когда вы вызываете «[pictureA removeFromSuperview];» в следующий раз количество сохранений было уменьшено до 1, и вы создали новый просмотр изображений. Поэтому каждый раз, когда вызывается imagePickerController: didFinishPickingMediaWithInfo: вы теряете память. Вместо этого сделайте
[pictureA removeFromSuperview];
[pictureA release];
когда вы удалите его из суперпредставления. Или, еще лучше, сделайте изображение свойством класса:
@property (nonatomic, retain) UIImageView *pictureA;
, который освободит старый imageView при назначении нового. Обязательно отпустите, когда назначите его:)
self.pictureA = [[[UIImageView alloc] init] autorelease];
или
UIImageView *imageView = [[UIImageView alloc] init];
self.pictureA = imageView;
[imageView release];
Я бы лично придерживался стиля автоматического выпуска, потому что вы всегда сможете сразу определить, правильно ли вы распределяете / удаляете.
Кроме того, вы всегда можете дважды проверить управление памятью, используя Product> Analyze в Xcode 4.