我有一个动作扩展,它可以获取图像,对图像进行较小的修改(例如叠加水印),然后允许用户打开另一个UIActivityController,将修改后的图像发送给另一个(任意)扩展(例如将图片分享到社交媒体)。由于遇到内存限制,与大多数(但不是全部)扩展共享后,我的扩展在 后崩溃。
我得到的错误是:
EXC_RESOURCE RESOURCE_TYPE_MEMORY (limit=120 MB, unused=0x0)
这在操作系统驱动的UIImage调用的深处发生。
步骤:
对于iOS提供的扩展名(例如保存或打印),不会出现崩溃。该崩溃确实会出现在我尝试过的所有第三方扩展程序中。
我用仪器进行诊断。我的扩展程序在执行图像操作时的内存使用量短暂达到75MB的峰值,然后降至27MB。当UI开始为 other 扩展构建时,我的应用程序的内存占用量迅速飙升。它达到120MB,然后消失。
在内存升级期间,我收到了三个didReceiveMemoryWarning调用。我持有的唯一数据是屏幕上的UIImageView。我已经尝试过杀死UIImageView了(imageView.removeFromSuperview然后imageView = nil),结果没有变化。
似乎第二个扩展正在我的扩展的内存中加载,并且合并的占用空间超过了120MB的限制。那有意义吗?那是预期的吗?
我承认存在这样一种扩展名的想法,即仅仅暂时保留要与另一扩展名共享的数据可能并不常见,但这是我能想到的最佳方法。修改后的数据不需要永久保存-如果新版本的照片库中也有新版本,则用户很容易混淆。我已经考虑过要通过扩展程序打开我的主应用程序以从那里共享,但是这似乎是被设计所阻止的(有些骇客建议我没有尝试过-见openURL not work in Action Extension)。
有任何解决方法吗?谢谢!