我在现有的照片编辑应用程序中添加了一个新的 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 ║
╚═══════════════════════╩═════╩═══════════╩══════════════════╝
几点观察:
- 附加调试器后,扩展的行为类似于“普通”应用
- 尽管与其他设备相比,4s 的内存总量 (512 MB) 只有一半,但它从系统中获得相同的约 100 MB 用于扩展。
现在我的问题是:我应该如何在照片编辑扩展中使用这么少的内存?一个包含 8 MP(相机分辨率)RGBA 图像的纹理仅消耗约 31 MB。如果我必须告诉用户只有在使用主应用程序时才能进行全尺寸编辑,那么这种扩展机制的意义何在?
你们中的一个人也达到了那个障碍吗?您是否找到了规避此限制的解决方案?