IOS中的巨大PNG图像

时间:2013-09-04 19:40:50

标签: iphone ios image

我的应用程序中有很多png图像导致我的应用程序超载我的iPad2设备的实际内存使用量。我的整个app文件夹包含大量声音文件和png图像,预编译只有50-60 MB,设备上只有90 MB,但在运行时我很容易达到300MB ++ .. ViewControllers在前ViewControllers等之上。我也试图解决..

我觉得奇怪的是,通过只显示一个背景.png图像,我将12 MB添加到实际内存使用(在仪器中看到)。我用来在故事板中填充ImageView图像的图像在我的项目文件夹中只有700 KB。取出它或将图像区域留空可以节省12 MB的内存......

我在应用程序中使用了很多这些背景图像以及其他前景图像,这些图像占用了很多空间。

任何建议或帮助表示赞赏 感谢。

1 个答案:

答案 0 :(得分:3)

嗯,磁盘空间700kb的图像并不意味着内存中有700kb的图像。它在存储在磁盘上时被压缩,但当它被带入内存时 - 它的大小会增加。

如果您在项目中使用了大量图片,我建议您使用[UIImage imageWithContentsOfFile:]方法。它不会在内部缓存图像,与使用[UIImage imageNamed:]相比,您可以更好地控制内存。

对我来说,一般的经验法则是这样的。如果图片很大并且在应用中使用过一次 - > [UIImage imageWithContentsOfFile:],但如果图片在应用的许多地方重复使用 - > [UIImage imageNamed:]

此外,如果您必须使用.png格式,因为它具有透明度,那么您可以尝试给.webp一个机会。 ios中不正式支持此格式,但github上有自定义实现,您可以获取抢劫。

更新:

我个人根本不在我的应用程序中使用界面构建器,因为我发现它非常耗时且速度慢。相反,我以编程方式创建所有视图,这为我提供了更多灵活性,例如在[UIImage imageWithContentsOfFile:][UIImage imageNamed:]之间进行选择。您可以将Outlet设置为UIImageView,然后在代码中设置实际图像。 至于png,iOS中没有首选的图像类型。这真的取决于你的情况。如果你需要透明度 - > png,只需要一个平面图像 - > JPG。这只是一个简单的例子。 至于.webp,正如我已经提到的,这种格式在iOS中没有得到官方支持,但你可以添加自己的支持。基本上,.webp将允许您替换.png并减小项目文件夹的大小而不会丢失图像的透明度。

希望这有帮助,欢呼!