Легче жестко запрограммировать ограничение.
Нет простого способа узнать, что такое «доступная память», так как больше памяти может внезапно освободиться, если появляется предупреждение о памяти или если телефон решает убить различные фоновые приложения (а именно Safari). Есть NSRealMemoryAvailable (), но он может просто вернуть установленное ОЗУ (и это, вероятно, то, что [NSProcessInfo PhysicalMemory] использует).
Вы можете попробовать сохранить изображения в очереди - при сохранении одного изображения за раз, вероятно, будет использоваться меньше памяти. Вы также можете добавлять маркеры в свою очередь, когда получаете предупреждение о памяти, и отключать сохранение изображений, когда их больше одного (в идеале вы хотите прекратить фотографировать, если вы получаете предупреждения памяти «уровня 2» или «уровня 3», но пока они выводятся на консоль, я не знаю какого-либо простого способа проверки кода. Предположительно, вы хотите возобновить работу с предупреждением в памяти, но их тоже не существует).
Также обратите внимание, что вы можете получить необработанные данные JPEG (в некоторых версиях ОС) через уведомление; Я забыл, как зовут, но ключ userInfo - @ "AVCaptureNotificationInfo_JPEGData". Если вы сохраните необработанные данные JPEG, вы сможете обработать их позже.
Я думаю, что UIImageWriteToSavedPhotosAlbum () тупо распаковывает JPEG-файл, возвращаемый камерой, и повторно сжимает его, но я могу ошибаться. Изображения с камеры занимают всего около 1-2 МБ, поэтому вы должны иметь возможность брать много, не разбивая ее, но в моих тестах это не так.