如何确定UIImage使用的字节数?

fea*_*ess 4 uiimage ios

我希望能够计算UIImage内存中使用的总字节数.

我可以通过将宽度乘以高度然后乘以乘数字节来进行粗略估计,但我想尽可能精确地计算尺寸.

rge*_*rge 6

通常,对象没有单个有意义的"大小",因为它们可以根据需要私下分配和释放任意数量的其他对象.sizeof(*myObj)只给出顶级结构的大小,而不是一个非常有用的数字.如果您需要分配和使用对象的完整内存影响,请在"仪器"下运行并观察分配.

对于a UIImage,其实际大小是支持它的任何大小,通常是NSData包含a PNG或a CGimageRef,加上对象开销.(当它被渲染到屏幕或其他上下文时也有像素缓冲区;但是该缓冲区属于所讨论的视图或上下文,而不是UIImage.如果a UIView正在进行渲染,那么该缓冲区很可能在GL纹理内存中.)

[UIImage imageWithData:[NSData dataWithContentsOfFile:@"foo.png"]]给你一个UIImagefoo.png文件相同的大小,加上一些无关紧要的开销.[UIImage imageNamed:@"foo.png"]做同样的事情,除了该类维护每个文件名一个对象的缓存表,并将导致该对象在低内存情况下转储其png的内存副本,将其"大小"减少到仅仅开销.

imageWithCGImage:和变体给你一个UIImage使用CGImage引用作为它的后备存储,并且CGImages可以是任意数量的东西,具体取决于它们的来源.如果你一直在绘画,它可能是一个未压缩的像素缓冲区.完全按照您的建议计算其大小.如果你需要它的大小"如果它来自文件",请检查UIImagePNGRepresentationUIImageJPEGRepresentation函数的结果.