Давайте пройдемся по шагам:
1) Объект NSData
является оберткой для массива байтов, или char *
.Это необработанные байты нужного вам изображения.
2) CGImageRef
- это способ представления изображения CoreGraphics
, который можно преобразовать в UIImage
с помощью селектора +imageWithCGImage:
,Вообще говоря, у вас есть более точный контроль над изображением с помощью CGImageRef
.
3) Преобразование этих изображений в миниатюру не сократит время, необходимое для загрузки.Файл должен быть сначала загружен в память, прежде чем он будет преобразован.
Пример использования вашей функции:
int myImageSize = .... // do what you need to to figure out the size of the image
UIImage *myImage = [UIImage imageWithCGImage:MyCreateThumbnailImageFromData([NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.myimage.com/smile.jpg"]], myImageSize)];
Это, однако, заблокирует пользовательский интерфейс, рассмотрите возможность использования GCD или NSURLConnectionвместо -dataWithContentsOfURL:
.
РЕДАКТИРОВАТЬ: Пример с GCD:
dispatch_async(dispatch_get_global_queue(0, 0), ^{
__block UIImage *myImage = [UIImage imageWithCGImage:MyCreateThumbnailImageFromData([NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.myimage.com/smile.jpg"]], myImageSize)];
[myImageView performSelectorOnMainThread:@selector(setImage:) withObject:myImage waitUntilDone:NO];
});