Я добавил новое расширение iOS 8 Photo Extension в свое существующее приложение для редактирования фотографий. Мое приложение имеет довольно сложный конвейер фильтрации и должно одновременно хранить в памяти несколько текстур. Однако на устройствах с 1 ГБ ОЗУ я легко могу обрабатывать 8-мегапиксельные изображения.
Однако в расширении есть гораздо более высокие ограничения памяти. Мне пришлось уменьшить изображение до менее чем 2 МП, чтобы обработать его без сбоя расширения. Я также понял, что проблемы с памятью возникают только тогда, когда к расширению не подключен отладчик. С ним все нормально работает.
Я провел несколько экспериментов. Я модифицировал приложение для тестирования бюджета памяти, чтобы оно работало в расширении, и получил следующие результаты (показывая количество объем ОЗУ в МБ, который можно выделить перед сбоем):
╔═══════════════════════╦═════╦═══════════╦══════════════════╗
║ Device ║ App ║ Extension ║ Ext. (+Debugger) ║
╠═══════════════════════╬═════╬═══════════╬══════════════════╣
║ iPhone 6 Plus (8.0.2) ║ 646 ║ 115 ║ 645 ║
║ iPhone 5 (8.1 beta 2) ║ 647 ║ 97 ║ 646 ║
║ iPhone 4s (8.0.2) ║ 305 ║ 97 ║ 246 ║
╚═══════════════════════╩═════╩═══════════╩══════════════════╝
Несколько наблюдений:
- С подключенным отладчиком расширение ведет себя как «обычное» приложение.
- Несмотря на то, что 4s имеет только половину общего объема памяти (512 МБ) по сравнению с другими устройствами, он получает те же ~ 100 МБ от системы для расширения.
Теперь мой вопрос: как я должен работать с этим небольшим объемом памяти в расширении для редактирования фотографий? Одна текстура, содержащая RGBA-изображение с разрешением 8 МП (разрешение камеры), занимает около 31 МБ. Какой смысл в этом механизме расширения, если я должен сообщить пользователю, что полноразмерное редактирование возможно только при использовании основного приложения?
Кто-то из вас тоже достиг этого барьера? Вы нашли решение обойти это ограничение?