Как определить объем оперативной памяти, которую использует конкретный UIImage? - PullRequest
3 голосов
/ 24 февраля 2012

Мне любопытно, есть ли открытый или закрытый API, позволяющий мне узнать, сколько ОЗУ использует какой-либо из UIImage? Кто-нибудь знает, как надежно получить его размер?

Ответы [ 2 ]

1 голос
/ 03 мая 2012
Данные

A UIImage будут храниться в памяти в виде распакованных данных, поэтому вы можете игнорировать рекомендации по проверке длины байта UIImagePNGRepresentation и т. Д.

Самое простое решение - захватить CGImageRef и использовать этот код:

- (size_t)byteSizeForImage:(UIImage *)image {
    CGImageRef imageRef = image.CGImage;

    size_t bitsPerPixel = CGImageGetBitsPerPixel(imageRef);
    size_t bitsTotal =  CGImageGetWidth(imageRef) * CGImageGetHeight(imageRef) *
                            bitsPerPixel;
    size_t bytesTotal = bitsTotal / 8;
    return bytesTotal;
}

Большую часть времени ваши изображения будут RGB (3 байта на пиксель) или RGBA (4 байта на пиксель), поэтому обычно получается width * height * 3 или width * height * 4.

0 голосов
/ 25 февраля 2012

Как сказал Джо, это даст вам количество байтов для изображения, если только «у изображения нет данных или если базовый CGImageRef содержит данные в неподдерживаемом растровом формате».

NSData *imageData = UIImagePNGRepresentation(image)
if (imageData)
{
    NSUInteger numBytes = [imageData bytes];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...