UIImagePickerControllerSourceTypeCamera захват памяти - PullRequest
5 голосов
/ 19 февраля 2009

Я использую UIImagePickerController, чтобы позволить пользователю выбрать изображение в моем приложении, сделав новый снимок или выбрав изображение из галереи. Используя галерею, приложение работает отлично. Но если я использую камеру в качестве источника, приложение израсходует много памяти и в конечном итоге будет убито из-за очень медленной работы.

Может кто-нибудь сказать, пожалуйста, оптимальный способ использования UIImagePickerControllerSourceTypeCamera.

Это код, который я использую

if(![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
    return;
picker = [[UIImagePickerController alloc] init];
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
picker.delegate = self;
[[self navigationController] presentModalViewController:picker animated:YES];
[picker release];

Ответы [ 3 ]

3 голосов
/ 20 февраля 2009

Нет ничего хитрого в использовании UIImagePickerController - он использует кучу памяти, и вам просто нужно с этим жить. Выпускать его, когда вы закончите, так же эффективно, как и получить.

Это касается самой программы выбора изображений. Другая часть вопроса - что вы делаете с объектами UIImage, которые он вам возвращает. Это большие объекты, по стандартам iPhone, и вы действительно не можете позволить себе хранить многие из них в памяти. Если вы отображаете изображение, это жизнь, но изображения, которые не отображаются на экране, могут быть безопасно выгружены в файл через UIImageJPEGRepresentation () и NSData writeToFile: atomically:.

Если вам нужно отобразить несколько изображений, рассмотрите возможность их уменьшения. 1600x1200 камеры уже намного больше, чем экран, а с несколькими изображениями на экране это даже более чрезмерно. Масштабирование до более низких разрешений значительно снижает требования к памяти. Пример кода для этого нетрудно найти - см. Предварительный просмотр камеры UIImagePickerController - портрет в ландшафтном приложении , например.

2 голосов
/ 20 февраля 2009

UIImagePickerController приводит к утечке памяти, как отмечено здесь и после 7 или 8 использований приводит к сбою приложения Вам нужно создать одноэлементный UIImagePickerController на весь срок службы вашего приложения, чтобы избежать этого дефекта Apple.

0 голосов
/ 25 марта 2009

Я знаю, что этот ответ - за фактом, но у меня возникла проблема того же типа, которая разрешилась сама, связавшись с iPhone SDK 2.2 и выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...