UIImagePickerController не освобождает память, которую он занимает - PullRequest
7 голосов
/ 12 марта 2012

Я видел эту вещь при использовании инструментов для моего приложения. Когда я профилирую свое приложение, начальная занятая память составляет 563 КБ , то есть до появления UIImagePickerController. На первом viewController есть одна кнопка, которая отображает UIImagePickerController.
Как только появляется UIImagePickerController, занятая память увеличивается до 1,6 - 1,7 МБ . Если я выбираю какое-либо изображение или отменяю UIImagePickerController, занятая память по-прежнему составляет 1,6 - 1,7 МБ , что, на мой взгляд, должно составлять 563 КБ (или может быть на несколько КБ больше).
Пожалуйста, смотрите код ниже, который я использовал:

- (IBAction)chooseButtonPressed:(id)sender
{
    UIImagePickerController *pickerController = [[UIImagePickerController new]autorelease];
    [pickerController setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
    [pickerController setDelegate:self];
}  

Почему память не освобождается?

enter image description here

Ответы [ 4 ]

1 голос
/ 12 марта 2012

Мы не можем добавлять изображения в комментарии, поэтому я добавляю это как ответ.Live Bytes всегда меньше, чем Overall Bytes, за исключением случаев, когда память освобождается в первый раз.Это видно из рисунка ниже.

enter image description here

Я не думаю, что с вашим освобождением что-то не так.Я думаю, вы просто смотрите на неправильные значения!

EDIT- Я думаю, что проблема может быть где-то еще.Чтобы увидеть значения, которые я видел, вам нужно внести небольшие изменения.Как показано на рисунке ниже, вам нужно снять флажок Only track active allocations, чтобы увидеть значения, которые вы ищете.Если вы все еще видите 7,41 МБ в Active allocations, значит, проблема в другом.

enter image description here

1 голос
/ 12 марта 2012

Поскольку вы указали опцию автоматического выпуска, она будет добавлена ​​в пул автоматического выпуска ... посмотрите, что сказано в документации ..

Application Kit создает пул автоматического выпуска в главном потокеначало каждого цикла цикла событий и сливает его в конце, тем самым освобождая любые автоматически выпущенные объекты, сгенерированные при обработке события.

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
...
...
[picker release];

}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
....
....
[picker release];

}
0 голосов
/ 12 марта 2012

Вы установили делегата на nil?

Для получения дополнительной информации вы можете обратиться к Ссылке на класс UIImagePickerConrtoller

[picker release];
picker.delegate = nil ;

Надеюсь, это поможет вам.

0 голосов
/ 12 марта 2012

попробуйте

UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[self presentModalViewController:picker animated:YES];
[picker release];
...