我为我的现有照片编辑应用添加了新的iOS 8照片扩展。我的应用程序有相当复杂的过滤流程,并需要同时保留多个纹理在内存中。然而,在只有1 GB RAM的设备上,我可以轻松地处理8 MP的图像。
然而,在扩展中,有更高的内存限制。我不得不将图像缩小到低于2 MP,以便在不崩溃扩展的情况下进行处理。我还发现,只有在没有调试器附加到扩展时才会出现内存问题。使用调试器时,一切都正常。
我进行了一些实验。我修改了一个内存预算测试应用程序,使其在扩展中工作,并得出了以下结果(显示在崩溃之前可以分配的RAM量,以MB为单位):
╔═══════════════════════╦═════╦═══════════╦══════════════════╗
║ Device ║ App ║ Extension ║ Ext. (+Debugger) ║
╠═══════════════════════╬═════╬═══════════╬══════════════════╣
║ iPhone 6 Plus (8.0.2) ║ 646 ║ 115 ║ 645 ║
║ iPhone 5 (8.1 beta 2) ║ 647 ║ 97 ║ 646 ║
║ iPhone 4s (8.0.2) ║ 305 ║ 97 ║ 246 ║
╚═══════════════════════╩═════╩═══════════╩══════════════════╝
一些观察结果:
- 附加调试器后,扩展程序的行为类似于“正常”应用程序。 - 尽管 iPhone 4s 只有总内存量(512 MB)的一半,但它从系统中获得了与其他设备相同的 ~100MB 的内存供扩展程序使用。
现在我的问题是:在照片编辑扩展程序中,我应该如何处理这么少的内存?一个包含8MP(相机分辨率)RGBA图像的纹理就已经占用了大约31MB的内存。如果我必须告诉用户只有在使用主应用程序时才能进行全尺寸编辑,那这个扩展机制还有什么意义呢?
你们中有人也遇到了这个限制吗?你找到了规避这个限制的解决方案吗?