iOS Action Extension - увеличение использования памяти при вызове другого расширения Action - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть расширение действия, которое принимает изображение, вносит небольшие изменения в изображение (например, накладывает водяной знак), а затем позволяет пользователю открыть другой UIActivityController для отправки измененного изображения в другое (произвольное) расширение (например, чтобы поделиться изображением в социальных сетях).Мое расширение зависает после общего доступа к большинству (но не всем) расширений из-за превышения лимита памяти.

Я получаю ошибку:

EXC_RESOURCE RESOURCE_TYPE_MEMORY (limit=120 MB, unused=0x0)

Это происходитглубоко внутри OS-управляемого вызова UIImage.

Шаги:

  1. Выберите изображение из приложения «Фотографии»
  2. Выберите значок «Поделиться»
  3. Выберитемое расширение
  4. Просмотреть измененное изображение в моем расширении
  5. Выберите значок «Поделиться»
  6. Выберите другое расширение (Tweetbot, Facebook ...)
  7. См.пользовательский интерфейс для другого расширения начинает появляться
  8. Crash

Сбой не отображается для расширений, предоставляемых iOS, таких как сохранение или печать.Авария действительно появляется для всех сторонних расширений, которые я пробовал.

Я использовал инструменты для диагностики.Использование памяти моего расширения кратковременно достигает 75 МБ при выполнении операций с изображениями, а затем достигает 27 МБ.Когда пользовательский интерфейс начинает сборку для другого расширения , объем памяти моего приложения быстро растет.Он достигает 120 МБ, затем умирает.

Я получаю три вызова didReceiveMemoryWarning во время эскалации памяти.Единственные данные, которые я храню, - это экранный UIImageView.Я попытался убить этот UIImageView на этом этапе (imageView.removeFromSuperview, затем imageView = nil) без изменений в результате.

Похоже, что вторичное расширение загружается в память моего расширения, и объединенная площадь превышает размерПредел 120 МБ.Имеет ли это смысл?Это ожидается?

Я допускаю, что идея расширения, существующего только для временного хранения данных для совместного использования с другим расширением, может быть не распространенной, но это лучший подход, который я могу придумать.Измененные данные не нужно сохранять навсегда - их может легко запутать пользователь, если новая версия будет также в их библиотеке фотографий.Я думал о том, чтобы мое расширение открывало мое основное приложение, чтобы поделиться им оттуда, но это, похоже, было предотвращено дизайном (некоторые взломы предложили, что я не пробовал - см. openURL не работает в расширении Action ).

Есть какие-нибудь обходные идеи?Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...