gpt4 book ai didi

ios - 我怎样才能知道 UIImageView 使用了多少内存?

转载 作者:可可西里 更新时间:2023-11-01 05:52:33 24 4
gpt4 key购买 nike

我正在制作一个使用大量 UIImageView 的应用,我想找出每个 UIImageView 的大小,以尝试更详细地了解应用的内存使用情况。

我玩过 Instruments,我可以看到应用程序分配的内存量,但我想更深入地了解哪些对象使用哪些内存。例如:

UIImageViewOne   10Mb

UIImageViewTwo 8Mb

UIImageViewThree 9Mb

UIImageViewFour 3Mb

这是否可以通过 Instruments 实现,或者是否有更简单的方法来查看此信息?

最佳答案

如果您想确定图像将使用的内存量,您可以查看 cgImage 属性(它返回一个 CGImageRef),然后提供将其作为 bytesPerRow 的参数并将其乘以图像的 height。因此,看起来像下面这样(在 Objective-C 实现中将使用 CGImageGetBytesPerRowCGImageGetHeight):

guard let cgImage = image.cgImage else { return }

let bytes = cgImage.bytesPerRow * cgImage.height

这会计算图像在未压缩并在应用程序中使用时所使用的像素缓冲区的大小。通常这个总和等于宽度乘以高度的 4 倍(均以像素为单位)。 (这对于四个 channel (红色、绿色、蓝色和 alpha)中的每一个都是一个字节。)这不是与图像相关的所有内存,但它占了绝大多数。


当我在我的 2,880 × 1,800 像素图像上运行上述代码时,它报告它占用了 20,736,000 字节(即 19.78 MB)。

如您所知,如果您想在仪器中看到这一点,您可以使用分配工具,然后在图表中的特定范围内拖动,您将看到在该时间段内分配但未释放的对象:

enter image description here

您会看到对于所选范围,最大分配是 19.78 mb 的 ImageIO_PNG_Data(或者如果您使用 JPG,您会看到 ImageIO_jpeg_Data ).

不幸的是,跟踪这些 ImageIO 分配回到我们的代码比大多数内存分配要复杂一点,因为 iOS 在解压缩期间使用了一些技巧。但是您可以看到此 ImageIO 分配如何与计算出的像素缓冲区大小相关联。

(请参阅 revision history 了解早期版本的 Swift 的翻译。)

关于ios - 我怎样才能知道 UIImageView 使用了多少内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29209580/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com