Наистина се боря с липсата на памет в приложението си. Това са основните операции, които извършвам, както е посочено по-долу. Обърнете внимание, че всеки път, когато потребител направи снимка с камерата, запазвам две различни нейни версии – едната е визуализация (за бързо зареждане) и една с високо качество за мащабиране и маркиране по-късно.
Ето списък с моя ред на операции:
- При стартиране на приложението покажете миниатюри на изображения, които са направени в приложението (очевидно при първото стартиране на приложението този списък е празен).
- Докоснете бутона на камерата, за да стартирате
UIImagePickerController
- Потребителят прави снимка и я запазва (отново се запазва визуализация и се запазва снимка в пълен мащаб)
- Списъкът с миниатюри се обновява и показва новото изображение за визуализация. Отново, общият размер на „Image IO“ в инструмента VM Tracker все още е много малък (увеличен с може би 0,5 MB отгоре).
- 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“ скача с 30MB.
Това не би било голяма работа, но когато се върна назад (навигационният контролер изскача), нито типът „Image IO“, нито типът „Dirty“ намаляват по размер. Сякаш UIImageView не се унищожава. Всеки път, когато натисна този контролер за изглед и заредя изображение, размерът се увеличава с 30MB и изскачането никога не го намалява.
Използвам 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) защо изображението е 30MB, когато е заредено.