我的iphone应用程序有很多高分辨率图像(例如:2898×779像素尺寸),整个项目文件夹的大小只有17mb但是如果我运行应用程序并且当第一个视图加载时真正的内存和脏在仪器的VM Tracker中显示的内存超过62mb。任何人都可以帮我避免这种情况吗?任何建议都会感激不尽。
答案 0 :(得分:3)
一旦加载到内存中的图像会丢失(大部分?)压缩。不幸的是,在磁盘上(捆绑在应用程序中)时,图像可能看起来不大,但一旦加载到您的应用程序中,它们可能会更大。
ram中的一个2898x779图像将有效地使用2898x779x4字节=〜9mb,将其与磁盘上的图像大小进行比较,您应该看到差异。
所以要真正回答你的问题,要么缩小你的图像(因为你的设备屏幕可能不是那么大,除非是视网膜ipad或其他东西)或使用CATiledLayer
只会加载部分图像在屏幕上可见,而不是整个图像。
答案 1 :(得分:2)
减少iOS应用内存问题的5个提示
<强> 1。使用虚拟内存 iOS不使用交换文件,但它支持虚拟内存。如果应用程序将大量数据保存在内存中以供随机访问,则需要将其组织为mapfile,而不是将其加载到RAM中 的malloc() 。最简单的方法是打电话 NSData initWithContentsOfMappedFile:
<强> 2。避免堆叠自动释放的对象 当您实例化NSString之类的对象而没有明确分配时,它们会一直存在,直到您的自动释放池发布 - 通常直到您的应用程序退出。大量使用这些技术可能会导致RAM中出现大量垃圾。使用 NSString initWithContentsOfFile: 所以你可以稍后发布它而不是 NSString stringWithContentsOfFile: 。同样的规则适用于 UIImage imageNamed: - 建议不要将其用于图像加载。
第3。处理内存警告 处理内存警告时卸载不必要的资源。即使你无法卸载任何你的东西电话 [super didReceiveMemoryWarning] 在你所有的UIViewControllers中。这将默认释放一些资源,如非前视图上的UI控件。未能处理此事件可能会使iOS确定您的应用程序值得查杀。
<强> 4。考虑限制使用动画视图过渡 注意到翻转过渡等动画会在执行时导致RAM使用率激增。此功能非常简洁,应该在许多情况下使用,但它可能会在负载很重的多任务环境中触发内存警告。特别是我们强烈建议避免动画OpenGL视图。
<强> 5。测试设备上的内存占用 使用仪器进行测试。最有用的工具是Allocations,Leaks和Activity Monitor。在大多数情况下,模拟器上的测试不相关,因为它的内存占用量往往完全不同。测试后,您可以了解应用程序的每个部分使用多少RAM,瓶颈在哪里以及如何进行优化。