2

фон:iPhone Разработка - UIImageView выпуск памяти

Вдохновленный из образца кода ScrollViewSuite Apple, я создал класс контроллера вида, который показывает уменьшенные изображения и один выбранный снимок. Иерархия управления для «выбранных» картин что-то вроде этого:

--> 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 МБ (прибл.). Когда я впервые увидел это, я был озадачен. Как это возможно? Uh, и конечный результат: сбой приложений на iPhone 3G (иногда).

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

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

+0

Он выходит из строя после того, как 1 х нагрузки 110Кб изображения в imageView? – Zinc

+0

Да. 110 Кбайт изображения при загрузке в изображениеView делает реальную съемку с 12 МБ до 38 МБ. – Mustafa

ответ

3

Может ли это иметь какое-то отношение к тому факту, что jpeg сжимается. Это может быть несжатое при отображении, следовательно, огромный скачок в памяти.

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

+0

Исходные размеры 2272 × 1704 – Mustafa

+0

Я думаю, вы, возможно, прав насчет сжатия и декомпрессии. Как я могу избежать этой декомпрессии? – Mustafa

+0

Это огромное изображение, которое можно использовать на iPhone. Вы не можете изменить его размер? Вот почему он занимает столько памяти, это как 3-мегапиксельное изображение. – Jasarien

0

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

Смежные вопросы