我使用此代码将其添加到我的视图中:
UIImageView *background = [UIImageView new];
background.frame = CGRectMake(0, 0, 1080, 1920);
background.image = [UIImage imageNamed:@"Submit.png"];
[self.view addSubview:background];
现在我使用仪器分配和"标记生成"进行分析。在图像分配之前和之后:
仪器表示将图像加载到内存需要7.92MB。 我也看到了与其他图片相同的问题。 当图像大小只有28KB时,为什么ImageIO_PNG_Data为7.92MB?
答案 0 :(得分:3)
这是因为PNG是描述图像外观的压缩数据,所以只有纯色的PNG很小,因为它很容易描述。但位图是位图 - 只是一个像素网格 - 并且完全取决于图像的尺寸(在您的情况下,它是巨大的)。
答案 1 :(得分:2)
@matt和@dan确实很好地解释了为什么未压缩的图像应该占据实际PNG图像大小的300X内存以显示在屏幕上。让这个问题变得更糟的是iOS缓存这些图像,并且不会从缓存EVER中释放它们,即使是在内存警告上也是如此。
所以这是防止iOS上的图像缓存以节省大量内存的方法,只需使用imageWithContentsOfFile而不是imageNamed:
替换:
background.image = [UIImage imageNamed:@"Submit.png"];
使用:
background.image = [UIImage imageWithContentsOfFile:[[[NSBundle mainBundle] bundlePath] stringByAppendingString:@"/Submit.png"]];
现在,当视图控制器被解除时,ImageIO_PNG_Data将被释放。
如果您的图像文件只显示一次并希望显示 确保它不会被添加到系统的缓存中,你应该这样做 而是使用imageWithContentsOfFile创建您的图像:这将 可能会将您的一次性图像保留在系统图像缓存之外 改善应用的内存使用特性。