【发布时间】:2014-10-16 13:36:37
【问题描述】:
我在现有的照片编辑应用程序中添加了一个新的 iOS 8 照片扩展程序。我的应用程序有一个相当复杂的过滤器管道,需要一次在内存中保留多个纹理。但是,在具有 1 GB RAM 的设备上,我可以轻松处理 8 MP 图像。
然而,在扩展中,内存限制要高得多。我必须将图像缩小到 2 MP 以下才能在不崩溃扩展的情况下对其进行处理。我还认为只有在没有将调试器附加到扩展时才会出现内存问题。有了它,一切正常。
我做了一些实验。我修改了memory budget test app 以在扩展中工作并得出以下结果(显示崩溃前可以分配的 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。如果我必须告诉用户只有在使用主应用程序时才能进行全尺寸编辑,那么这种扩展机制的意义何在?
你们中的一个人也达到了那个障碍吗?您是否找到了规避此限制的解决方案?
【问题讨论】:
-
我应该指出 UIImage 应该归咎于此; Apple 文档指出,任何由 UIImage 对象引用的 1,920 × 1,080 照片或视频都会不可避免地为照片编辑扩展程序带来内存问题。您不是在使用照片应用程序中的手机限制,而是特定于应用程序的限制(我认为这与保护应用程序崩溃恶意软件有关);指向相机内存的数量或任何不可用的东西。他们说,可悲的是,您必须将媒体尺寸减小到 1,280 × 720 或更小。平铺不是一种选择。
-
很好奇这在 iOS 10 中有何变化。根据@rickster 在下面提到的CIImageProcessorKernel。特别是在使用 GPUImage 等其他图像技术时。
标签: memory ios8 ios8-extension