Разработка iPhone - проблема с памятью UIImageView

Фон:

Вдохновленный примером кода Apple ScrollViewSuite, я создал класс контроллера представления, который показывает эскизы изображений и одно выбранное изображение. Иерархия элементов управления для "выбранного" изображения выглядит примерно так:

--> UIView
    --> UIScrollView
        --> UIImageView

Следующий код используется для помещения UIScrollView в представление:

imageScrollView = [[UIScrollView alloc] initWithFrame:frame];
[imageScrollView setBackgroundColor:[UIColor clearColor]];
[imageScrollView setDelegate:self];
[imageScrollView setBouncesZoom:YES];
[[self view] addSubview:imageScrollView];

... и следующий код используется для настройки и добавления UIImageView в UIScrollView:

// Custom method to return a UIImage from a URL string
UIImage *image = [UIImage newImageWithContentsOfURL:imageURL];  

// first remove previous image view, if any
[[imageScrollView viewWithTag:MAIN_IMAGE_TAG] removeFromSuperview];

// set the new image view
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
[imageView setDelegate:self];
[imageView setTag:MAIN_IMAGE_TAG];
[imageScrollView addSubview:imageView];
[imageScrollView setContentSize:[imageView frame].size];

// choose minimum scale so image width fits screen
float minScale  = [imageScrollView frame].size.width / [imageView frame].size.width;
[imageScrollView setMinimumZoomScale:minScale];
[imageScrollView setZoomScale:minScale];
[imageScrollView setContentOffset:CGPointZero];

// clear memory
[imageView release];
imageView = nil;

[image release];
image = nil;

Вот метод категории, который я использовал для получения UIImage, используя строку URL:

+ (UIImage *)newImageWithContentsOfURL:(NSString *)imageURL {   
    NSURL *url = [[NSURL alloc] initWithString:imageURL];
    NSData *data = [[NSData alloc] initWithContentsOfURL:url];
    UIImage *image = [[UIImage alloc] initWithData:data];
    [data release];
    [url release];

    return image;
}

Проблема: Эффект загрузки изображения в формате JPEG размером 110 КБ (приблизительно) заключается в том, что реальная память приложения увеличивается с 12 МБ (приблизительно) до 38 МБ (приблизительно). Я был сбит с толку, когда впервые увидел это. Как это возможно? Ну и конечный результат: приложение вылетает на iPhone 3G (иногда).

Обратите внимание, что показания памяти были получены с помощью инструмента Memory Monitor в инструментах - во время тестирования приложения на устройстве (не на симуляторе). Также обратите внимание, что инструменты не обнаруживают утечек памяти, и Static Analyzer также не указывает ни на что подозрительное.

Мне нужна помощь!

2 ответа

Решение

Может ли это быть связано с тем, что JPEG сжатый. Это может быть несжатым при отображении, следовательно, огромный скачок в памяти.

Каковы размеры изображения в масштабе 1:1?

Конечно, это должно быть что-то другое, чем jpeg, который заставляет его использовать столько памяти и сбоев - у меня есть PNG, который составляет 15200x250 px, и он прекрасно прокручивается...

Другие вопросы по тегам