Я действительно борюсь с нехваткой памяти в моем приложении. Это основные операции, которые я выполняю, как указано ниже. Обратите внимание, что всякий раз, когда пользователь делает снимок с помощью камеры, я сохраняю две разные его версии: одну для предварительного просмотра (для быстрой загрузки) и одну с высоким качеством для последующего масштабирования и пометки.
Вот список моего порядка операций:
- При запуске приложения показывать миниатюры изображений, снятых в приложении (очевидно, что при первом запуске приложения этот список пуст).
- Нажмите кнопку камеры, чтобы запустить
UIImagePickerController
- Пользователь делает снимок и сохраняет его (опять же, сохраняется предварительный просмотр и сохраняется полномасштабное фото)
- Список эскизов обновится и покажет новое изображение для предварительного просмотра. Опять же, общий размер «Image IO» в инструменте VM Tracker все еще очень мал (увеличен максимум на 0,5 МБ).
- User touches one of the preview images, which launches a different view controller that does the following:
- Create new UIImageView, load the image, add as a subview to View Controllers view
- Внезапно «Image IO» подскакивает на 30 МБ.
Это не имеет большого значения, но когда я возвращаюсь (всплывающий навигационный контроллер), ни тип «Image IO», ни тип «Dirty» не уменьшаются в размере. Как будто UIImageView не уничтожается. Каждый раз, когда я нажимаю этот контроллер представления и загружаю изображение, размер увеличивается на 30 МБ, а извлечение никогда не уменьшает его.
Я использую ARC, поэтому я не вызываю релиз сам, но я ожидаю, что он будет уничтожен, когда я вытащу контроллер представления.
Просто к вашему сведению, настройки, которые я использую для сохранения предварительного просмотра и полного изображения:
Предварительный просмотр: [UIImageJPEGRepresentation([UIImage imageWithImage:image scaledToSize:CGSizeMake(300, 400)], 0.4f) writeToFile:previewPath atomically:NO];
Полный: [UIImageJPEGRepresentation(image , 0.8f) writeToFile:imagePath atomically:NO];
Моей главной заботой является (1) выяснение того, как избавиться от памяти, используемой из UIImage, после того, как я вставлю содержащий контроллер представления, но я также хотел бы знать (2), почему изображение составляет 30 МБ при загрузке.