У меня есть расширение действия, которое принимает изображение, вносит небольшие изменения в изображение (например, накладывает водяной знак), а затем позволяет пользователю открыть другой UIActivityController для отправки измененного изображения в другое (произвольное) расширение (например, чтобы поделиться изображением в социальных сетях).Мое расширение зависает после общего доступа к большинству (но не всем) расширений из-за превышения лимита памяти.
Я получаю ошибку:
EXC_RESOURCE RESOURCE_TYPE_MEMORY (limit=120 MB, unused=0x0)
Это происходитглубоко внутри OS-управляемого вызова UIImage.
Шаги:
- Выберите изображение из приложения «Фотографии»
- Выберите значок «Поделиться»
- Выберитемое расширение
- Просмотреть измененное изображение в моем расширении
- Выберите значок «Поделиться»
- Выберите другое расширение (Tweetbot, Facebook ...)
- См.пользовательский интерфейс для другого расширения начинает появляться
- Crash
Сбой не отображается для расширений, предоставляемых iOS, таких как сохранение или печать.Авария действительно появляется для всех сторонних расширений, которые я пробовал.
Я использовал инструменты для диагностики.Использование памяти моего расширения кратковременно достигает 75 МБ при выполнении операций с изображениями, а затем достигает 27 МБ.Когда пользовательский интерфейс начинает сборку для другого расширения , объем памяти моего приложения быстро растет.Он достигает 120 МБ, затем умирает.
Я получаю три вызова didReceiveMemoryWarning во время эскалации памяти.Единственные данные, которые я храню, - это экранный UIImageView.Я попытался убить этот UIImageView на этом этапе (imageView.removeFromSuperview, затем imageView = nil) без изменений в результате.
Похоже, что вторичное расширение загружается в память моего расширения, и объединенная площадь превышает размерПредел 120 МБ.Имеет ли это смысл?Это ожидается?
Я допускаю, что идея расширения, существующего только для временного хранения данных для совместного использования с другим расширением, может быть не распространенной, но это лучший подход, который я могу придумать.Измененные данные не нужно сохранять навсегда - их может легко запутать пользователь, если новая версия будет также в их библиотеке фотографий.Я думал о том, чтобы мое расширение открывало мое основное приложение, чтобы поделиться им оттуда, но это, похоже, было предотвращено дизайном (некоторые взломы предложили, что я не пробовал - см. openURL не работает в расширении Action ).
Есть какие-нибудь обходные идеи?Спасибо!