Я пишу приложение, которое использует UIImagePickerController, чтобы делать несколько снимков с камерой так же быстро, как позволяет iOS. Мое приложение должно запускаться на iOS 3.13 на всех версиях оборудования iPhone (с v1 по 4). Я использую UIImagePickerController с камеройOverlayView.Как проверить, достаточно ли памяти для обработки снимка, снятого UIImagePickerController, при съемке нескольких фотографий с помощью камеры?
Мой вопрос в том, как определить программно, сколько фотографий можно обрабатывать сразу на основе доступной памяти? Подробности смотрите ниже. Любая помощь приветствуется!
Когда делегат imagePicker получает imagePicker: didFinishPickingMediaWithInfo :, делегат сохраняет изображение полного размера в сохраненном фотоальбоме с помощью UIImageWriteToSavedPhotosAlbum(). Как только я решил эту проблему, приложение будет делать больше вещей с полным размером изображения.
В качестве теста я фотографирую как можно быстрее. В конце концов, как и ожидалось, приложение получает предупреждение о памяти из-за большого количества фотографий в памяти при сохранении в фотоальбоме. Если я игнорирую предупреждения о памяти и продолжаю фотографировать, в конечном итоге приложение будет убито iOS b/c.
У меня нет проблем с установкой ограничения на количество одновременных фотографий, которые я разрешаю приложению обрабатывать одновременно. Каждая версия iPhone HW имеет разную емкость памяти и различные разрешения камеры. С iOS 4 многозадачность может также влиять на доступную память. Я предпочел бы сделать это программно, чем жесткий код, на основе версии HW.
тест приложение, которое показывает такое поведение в Source Code
Я решил это с помощью подклассов NSOperationQueue и NSOperation для управления обработкой изображений (op делает больше, чем просто сохраняет в фотоальбоме). Управление очередью осуществляется путем ограничения количества параллельных операций (на основе iPhone HW), приостановки очереди на предупреждениях памяти и возобновления очереди, когда нет выполнения ops (для подзапроса требуется подкласс NSOperationQueue). На iPhone v1 я могу быстро взять> 25 фото, и приложение работает отлично. Конечно, для завершения обработки требуется много времени. – XJones