iOS应用程序崩溃,因为图像使用太多内存

And*_*rin 0 ios swift

我知道这是一个愚蠢的问题,但这是我第一个真正的应用程序,我必须要做,我没有人问,我查找了这个问题,没有发现其他类似的问题.

我的应用程序在真实设备上崩溃,毫无例外.我在模拟器中看到使用了太多内存,过了一段时间我得出的结论是我使用的图片都应该受到责备.

该应用程序以这种方式构建:它有8个viewControllers用于不同的东西:例如,它开始于一个让用户选择他/她将玩的头像,这里我有两张图片,接下来是一个viewController,显示该头像的统计数据,这是另一张图片,依此类推.问题是每张图片都使用40MB的RAM进行显示,所以当用户进入游戏所在的gameviewCOntroller时,应用程序会使用超过300MB的RAM.因此,在iPAD 2或iPhone 4等设备上崩溃,但在iphone 5上却没有崩溃.

我尝试从"images.xcassets"和".atlas"文件夹设置图像,但结果完全相同.图片的尺寸不超过1500x1999像素,它们是png格式.

另外,我看到如果应用程序直接启动到giveViewController它将使用180MB,所以另一个viewController保留在内存或类似的东西.我应该"清除"它们或类似的东西吗?

//-------update-------
Run Code Online (Sandbox Code Playgroud)

这是我从仪器得到的: 在此输入图像描述

And*_*rea 5

内存在移动设备上是一个大问题,你的问题没有明确的答案,但我可以给你一些建议:

  • 如果您的图像是纯色或具有对称轴,请使用可调整大小的图像.您可以使用一行像素乘以或高度来覆盖整个屏幕,使用少量内存
  • 图像压缩在图像解压缩时不起作用.因此,如果你有一个600kb的png并且你认为转换为300kb将降低内存使用量仅适用于"磁盘空间"当图像在内存中解压缩时大小为widthXheightXNumber_of_channelXbit_for_channel
  • 调整图像大小:如果正在将2000px正方形图像加载到内存中并在800 px square的图像视图中显示它,请在添加之前调整大小.调整大小时只会有一个峰值,但稍后会使用更少的内存
  • 如果您需要使用大图像,请使用平铺技术,例如 CATiledLayer
  • 如果你不再需要图像就可以摆脱它.有一个图像路径数组是可以的,但不是一个完整的未压缩图像数组
  • 避免-imageNamed它缓存图像,即使Apple说这个缓存是在内存压力下释放的,你也没有很多控制权来避免崩溃为时已晚

这些是一般性建议,如果符合您的要求,则取决于您.