iOS Action Extension-调用另一个Action Extension时,内存使用量激增

时间:2018-12-26 21:27:14

标签: ios uiimage ios-extensions

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

我得到的错误是:

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

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

步骤:

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

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

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

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

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

我承认存在这样一种扩展名的想法,即仅仅暂时保留要与另一扩展名共享的数据可能并不常见,但这是我能想到的最佳方法。修改后的数据不需要永久保存-如果新版本的照片库中也有新版本,则用户很容易混淆。我已经考虑过要通过扩展程序打开我的主应用程序以从那里共享,但是这似乎是被设计所阻止的(有些骇客建议我没有尝试过-见openURL not work in Action Extension)。

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

0 个答案:

没有答案