2009-07-11 6 views
4

Мое приложение имеет вид с тремя UIImageViews. В качестве файлов ресурсов имеется около 150 изображений, каждый из которых составляет около. Приложение покажет все изображения, но только три за раз.Загрузка новых изображений в UIImageView, память из предыдущих изображений не выпущена

Но каждый раз, когда я нажимаю кнопку, чтобы загрузить еще три изображения в UIImageViews, столбец «Общий байт» в приложении «Инструменты» увеличивается примерно на 700 КБ, пока я не получу предупреждение о низкой памяти, а затем приложение выйдет из строя. Так или иначе, память, которую я использую для каждой загрузки трех изображений, не выпускается.

Я искал googled и старался изо всех сил, чтобы это сделать, но не успел и мне нужна помощь.

Я попытался это:. (Этот код является частью действия, чтобы загрузить еще три изображения Три ImageViews являются imgShownLeft, imgShownMiddle и imgShownRight Те переменные экземпляра я сначала поставить currentImage во всех трех UIImageViews.. , а затем положить previousImage в левую и nextImage в праве одного:

NSString *strImageToSet = [[imgNamesArray objectAtIndex:currentImage] stringByAppendingFormat:@".jpg"]; 
UIImage *img = [UIImage imageNamed:strImageToSet]; 
[imgShownMiddle setImage:img]; 
[imgShownLeft setImage:img]; 
[imgShownRight setImage:img]; 

NSString *strPreviousImage = [[imgNamesArray objectAtIndex:previousImage] stringByAppendingFormat:@".jpg"]; 
img = [UIImage imageNamed:strPreviousImage]; 
[imgShownLeft setImage:img]; 

NSString *strNextImage = [[imgNamesArray objectAtIndex:nextImage] stringByAppendingFormat:@".jpg"]; 
img = [UIImage imageNamed:strNextImage]; 
[imgShownRight setImage:img]; 

Тогда я попытался это: вместо:

UIImage *img = [UIImage imageNamed:strImageToSet]; 

я использовал:

UIImage *img = [[UIImage alloc] initWithContentsOfFile:strImageToSet]; 

и назначен img к UIImageViews таким же образом, а затем [img release];

Тогда я попробовал:

UIImage *img = [[[UIImage alloc] initWithContentsOfFile:strImageToSet] autorelease]; 

Тогда я попробовал:

img = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[imgNamesArray objectAtIndex:currentImage] ofType:@"jpg"]]; 

Но в каждом случае требования к памяти росли с каждым прогоном этого действия.

Я знаю, что можно хранить одновременно три изображения без хранения 150 изображений в памяти! Что я делаю не так?

Спасибо за понимание. /SD

+0

Вы нашли решение по этой проблеме? –

ответ

-1

Я думаю, что вы хотите использовать

img = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[imgNamesArray objectAtIndex:currentImage] ofType:@"jpg"]]; 

сделать свою загрузку (потому что UIImage imageNamed:, мол, некоторые кэширование не требуется), а затем добавить

[img release]; 

после каждого вызова setImage, потому что в подзаголовках должно быть retain -обращение изображений, поэтому вы пропускаете счетчик ссылок.

Я бы подумал, что вторая версия с autorelease будет работать правильно, но, честно говоря, правила управления памятью какао все еще меня пугают, даже когда я уверен, что знаю, что я делаю.

+0

Вы не должны вызывать 'release' на этих изображениях, вы не являетесь их владельцем. – Jim