Попробуйте отключить средство выбора и отпустить его после того, как вы получите изображение, снятое с камеры.
Кроме того, если камера недоступна, вы теряете память, создавая средство выбора изображенийи не отпускать его в случае ошибки.
Создайте UIImagePickerController с автоматическим выпуском и не release
это в методе imagePickerController:didFinishPickingMediaWithInfo:
, просто удалите его в конце.
Другойпроблема в том, что в дополнение к UIImage
, содержащему исходное изображение, вы создаете уменьшенное изображение и миниатюру.В этой ситуации нагрузка на память может быть высокой, поэтому вы должны как можно быстрее избавиться от изображений из памяти, особенно когда вы пытаетесь загрузить изображение сразу после того, как оно выбрано так, что базовая сетевая структура (что бы вы ни использовали)) создает еще один фрагмент памяти, представляющий загружаемое изображение.
Попробуйте разделить процесс выбора изображения, создания уменьшенного изображения и эскиза и его загрузки, перемещая эти части кода на отдельные этапыNSOperationQueue
.
- Получить изображение из средства выбора и сохранить его на «диске».Освободите память, связанную с PickerController.
- Получить изображение с диска, создать миниатюру и уменьшенную версию, сохранить их на диск.Очистите память.
- Получите уменьшенное изображение с диска и загрузите его.
Не делайте все в главном потоке, потому что ваше приложение будет убито во время выполненияесли он блокирует интерфейс слишком долго.