iOS Action Extension-调用另一个Action Extension时内存使用量迅速增加

Mit*_*hen 5 uiimage ios ios-extensions

我有一个动作扩展,它接受图像,对图像进行小修改(例如叠加水印),然后允许用户打开另一个UIActivityController,将修改后的图像发送到另一个(任意)扩展(例如与社交媒体分享图片)。与大多数(但不是全部)扩展共享后,我的扩展崩溃了,因为达到了内存限制。

我得到的错误是:

EXC_RESOURCE RESOURCE_TYPE_MEMORY (limit=120 MB, unused=0x0)
Run Code Online (Sandbox Code Playgroud)

这在操作系统驱动的UIImage调用的深处发生。

脚步:

  1. 从“照片”应用中选择图像
  2. 选择共享图标
  3. 选择我的分机
  4. 在我的扩展程序中查看修改后的图片
  5. 选择共享图标
  6. 选择其他扩展名(Tweetbot,Facebook ...)
  7. 看到其他扩展名的用户界面开始出现
  8. 崩溃

对于iOS提供的扩展名(例如保存或打印),不会出现崩溃。崩溃确实会出现在我尝试过的所有第三方扩展中。

我用仪器进行诊断。我的扩展程序在执行图像操作时的内存使用量短暂达到75MB的峰值,然后降至27MB。当用户界面开始为其他扩展程序构建时,我的应用程序的内存占用量迅速飙升。它达到120MB,然后消失。

在内存升级期间,我收到了三个didReceiveMemoryWarning调用。我持有的唯一数据是屏幕上的UIImageView。我已经尝试过杀死UIImageView了(imageView.removeFromSuperview然后imageView = nil),结果没有变化。

似乎辅助扩展正在我的扩展的内存中加载,并且合并的占用空间超过了120MB的限制。那有意义吗?那是预期的吗?

我承认存在一个扩展的想法是存在的,它只是暂时保留要与另一个扩展共享的数据,但这并不是我能想到的最佳方法。修改后的数据不需要永久保存-如果新版本的照片库中也有新版本,则用户很容易混淆。我曾考虑过扩展程序可以从那里打开我的主应用程序进行共享,但是这似乎是被设计所阻止的(有些黑客建议我没有尝试过-请参见openURL在Action Extension中不起作用)。

有任何解决方法吗?谢谢!