Справочная информация:
Вдохновленный примером кода 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 в Instruments - во время тестирования приложения на устройстве (не на симуляторе). Также обратите внимание, что инструменты не обнаруживают утечек памяти, а Static Analyzer также не указывает ни на что подозрительное.
Мне нужна помощь!