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

时间:2015-03-23 11:55:26

标签: ios uiimageview instruments

我正在创建一个使用大量UIImageView的应用程序,我想知道每个UIImageViews的大小,试着看看应用程序&# 39;更详细的内存使用情况。

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

UIImageViewOne   10Mb

UIImageViewTwo   8Mb

UIImageViewThree 9Mb

UIImageViewFour  3Mb

这可以通过仪器实现,还是有更简单的方法来查看这些信息?

1 个答案:

答案 0 :(得分:1)

如果要确定图像将使用的内存量,可以查看CGImage属性(返回CGImageRef),然后将其作为参数提供给{ {1}}并将其乘以图片的CGImageGetBytesPerRow。所以,看起来如下(这是Swift,Objective-C实现可能很明显):

CGImageGetHeight

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


当我在2880 x 1800像素图像上运行上面的代码时,它报告说需要20,736,000字节(即19.78 mb)。

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

enter image description here

您会看到,对于所选范围,最大分配是let imageRef = image.CGImage let size = CGImageGetBytesPerRow(imageRef) * CGImageGetHeight(imageRef) 的19.78 mb(或者如果您使用JPG,则会看到ImageIO_PNG_Data)。

不幸的是,跟踪这些ImageIO_jpeg_Data分配回到我们的代码比使用大多数内存分配稍微复杂一点,因为iOS在解压缩过程中做了很多手。但您可以看到此ImageIO分配与计算的像素缓冲区大小有何关联。

相关问题