从数据库存储和检索图像时的内存问题

时间:2016-10-16 15:09:59

标签: ios sqlite memory

我正在开发包含原生SQLite数据库的应用程序,我在其中存储和检索图像并显示到我的应用程序中。

现在我的问题就像我在目录中存储大量图像并将其路径存储到数据库中。因此,当我从数据库中检索该路径并将图像加载到应用程序时,每个图像的内存增加高达10-20 Mb。

我还尝试将图像数据存储到数据库中,但问题相同,内存每张图像增加10-20 Mb。

请问该怎么办这个内存问题? 帮帮我吧

2 个答案:

答案 0 :(得分:1)

可能是您尝试显示的图像比屏幕上显示的图像大得多。尝试将图像加载到内存中,创建一个所需大小的版本,然后使用它。当然,您可以实现一些缓存,这样您就不必继续调整相同的图像大小。但是当原始图像超出范围时,其内存将被释放。如果您总是需要相同大小的图像,请在将它们存储到数据库之前尝试调整它们的大小,但如果您想支持多种尺寸(可能针对不同的设备),则将图像存储为您需要的最大尺寸并调整大小其他人。

答案 1 :(得分:1)

图像在应用程序中使用时,可能需要比持久存储中的资产大小更多的内存。资产经常被压缩(例如JPG或PNG),但是当您使用图像时,它们会被解压缩,通常每个像素需要4个字节(分别为红色,绿色,蓝色和alpha字节)。因此,例如,当您使用图像时,iPhone 7+全屏视网膜图像可能需要14mb。因此,内存有效的技术是使用延迟加载,而不是创建UIImage对象,直到你绝对需要它们。并且,正如Jerry建议的那样,因为内存量取决于图像的大小而不是图像的使用图像,如果图像的尺寸大于使用它们的UIImageView所需的尺寸(即,imageview的宽度和高度乘以设备的"比例"),您可能需要相应地调整图像大小。