2009-02-19 4 views
5

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

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

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

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

ответ

2

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

+1

Это сообщение в блоге несколько месяцев назад, и я не смог воспроизвести ошибку в последней iPhone OS. Если вы нацеливаете 2,2, то эта проблема не должна вас беспокоить. Если вы нацеливаетесь на <2.2, то имейте это в виду. –

3

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

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

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

0

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

Смежные вопросы