我有一个WebP图像。由于没有本机iOS支持,我使用libwebp将其解码为malloc
&n; RGB RGB缓冲区。
uint8_t *rgb = malloc(width * height * 3);
WebPDecode(rgb, ...);
CGDataProviderRef provider = CGDataProviderCreateWithData(rgb, size, ...);
CGImageRef imageRef = CGImageCreate(width, height, provider, ...);
UIImage *image = [UIImage imageWithCGImage:imageRef];
CGDataProviderRelease(provider);
CGImageRelease(imageRef);
这很好用。但是我使用的图像非常大,所以上面的代码分配了一个很多的内存,只要图像被保留,uint8_t *rgb
缓冲区就会停留。< / p>
现在我也有完全相同图像的JPEG版本。在其编码状态下,JPEG比WebP大约30%。由于iOS原生支持JPEG,我可以像这样创建UIImage
:
NSData *jpegData = ...;
UIImage *image = [UIImage imageWithData:jpegData];
我不确定imageWithData:
幕后的内容,但由于某种原因,它只使用了大约1/3的内存作为我在上面创建的WebP图像(由Xcode,设备和模拟器报告) )。
我的问题:如果我理解正确,在某个时刻将图像渲染到屏幕之前,必须将其解码为RGB组件。如果我在这个假设中是正确的,那么这两个图像是否应该占用相同数量的内存?
更新:Xcode似乎没有报告正在使用的真实内存,但是仪器确实如此。在Instruments中分析应用程序我可以看到由malloc
和ImageIO_JPEG_Data
分配的相同内存量。谁能解释一下Xcode的内存报告实际上在告诉我什么?它看起来很疯狂。