ios - 为什么我的 UIImage 占用这么多内存?

标签 ios objective-c uiview uiimage

我有一个 UIImage,我正在将其加载到我的应用程序的一个 View 中。这是一张 10.7 MB 的图片,但当它加载到应用中时,应用的资源使用量突然增加了 50 MB。为什么要这样做?使用的内存不应该只增加大约 10.7MB 吗?我确信加载图像是导致内存使用量激增的原因,因为我尝试将这些行注释掉,内存使用量又回到了 8 MB 左右。这是我加载图像的方式:

UIImage *image = [UIImage imageNamed:@"background.jpg"];
self.backgroundImageView = [[UIImageView alloc] initWithImage:image];
[self.view addSubview:self.backgroundImageView];

如果没有办法减少这个图像使用的内存,有没有办法强制它在我想要的时候解除分配?我正在使用 ARC。

最佳答案

不,它不应该是 10.7MB。 10.7MB 是图像的压缩大小。 加载到 UIImage 对象中的图像是解码后的图像。

图像中的每个像素使用 4 个字节(R、G、B 和 Alpha),因此您可以计算内存大小,高度 x 宽度 x 4 = 内存中的总字节数。

因此,当您将图像加载到内存中时,它会占用大量内存,并且由于 UIImageView 用于呈现图像,并且图像作为 subview 保存在内存中。

您应该尝试更改图像大小以匹配 iOS 屏幕大小。

关于ios - 为什么我的 UIImage 占用这么多内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22662116/

相关文章:

ios访问主窗口或 View

ios - 缓存不适用于自定义 NSURLProtocol

ios - 传递给不同 Controller 时 AVPlayer 持续时间会发生变化

ios - 从抽屉 Controller 退出左 View Controller

objective-c - for 循环中的表达式结果未使用警告

ios - UIView 中的 UITableView

objective-c - 具有通用 UIView 的子类 UILabel 和 UITextView

ios - CoreData to-many 添加错误

ios - 考虑到时区,如何按日期属性获取记录?

ios - 检查一个方法是否已经被调用并且不要再次调用它