2013-02-19 4 views
0

Я пытаюсь создать приложение с изображениями, которые я загрузил с сервера. Изображения находятся в большом количестве. Поэтому, когда я пытаюсь запустить свой iPod, он падает после загрузки от 50 до 60 изображений. И авария из-за утечки памяти, которую я узнал, тестируя свое приложение с помощью инструментов. Я использовал imageViews и кнопку для каждого ImageView, и я также выпустил эти объекты. Вот мой код, который я использовал в своем приложении.Проблема с утечкой памяти UIImageView - Objective C

NSInteger result = [self loadedBlipCount] + (_feed.hasMore ? 1 : 0); 


if (result == 0 && _emptyFeedCell) 
    result = 1; 
int outer_count = result/3; 


scroll_view.backgroundColor = [UIColor whiteColor]; 

scroll_view.delegate = self; 

for (int i=0; i<outer_count; i++) 
//if (i<outer_count) 

{ 
    xPos = 10; 

    for (int j=0; j<3; j++) { 


     _blipyy = [_feed blipAtIndex:count]; 


     image_view = [[URLImageView alloc] initWithFrame:CGRectMake(xPos, yPos, 90, 90)]; 

     image_view.tag = count_tag; 
     image_view.url = _blipyy.image_tab_images; 



     UIButton *img_butt = [[UIButton alloc] initWithFrame:CGRectMake(xPos, yPos, 90, 90)]; 
     img_butt.tag = count_tag + 10000; 
     [img_butt addTarget:self action:@selector(image_tapped:) forControlEvents:UIControlEventTouchUpInside]; 

     xPos = xPos + 95; 
     count = count + 1; 
     count_tag = count_tag + 1; 
     //count_1= count_1 +1; 

     [scroll_view addSubview:image_view]; 
     [scroll_view addSubview:img_butt]; 
     [image_view release]; 
     [img_butt release]; 
     //[image_view release]; 
    } 
    // }); 
    yPos = yPos + 95; 

} 

Пожалуйста, помогите мне с этой проблемой. Заранее спасибо!!

+0

Использование табличного представления во избежание проблем с распределением памяти – NANNAV

+0

Вы сохраняете копии, сохраненные в изображениях, добавляя image_view в scroll_view как подвью. addSubview сохраняет его. –

+0

@HermannKlecker, так что освобождение image_view еще раз исправит его ?? –

ответ

0

Эта проблема нуждается в вас, чтобы изменить свой подход. Для вас важно использовать либо UITableView (это поможет вам справиться с проблемами памяти). Однако, если вы все еще хотите пойти и использовать UIImageView, то я предлагаю вам использовать это AsyncImageView. Чтобы позвонить по этому API-интерфейсу:

ASyncImage *img_EventImag = alloc with frame; 
NSURL *url = yourPhotoPath; 
[img_EventImage loadImageFromURL:photoPath]; 
[self.view addSubView:img_EventImage]; // In your case you'll add in your TableViewCell. 

Это то же, что с использованием UIImageView. Легко, и он делает большинство вещей для вас. AsyncImageView включает в себя как простую категорию в UIImageView для загрузки и отображения изображений асинхронно на iOS, так чтобы они не блокировали пользовательский интерфейс и подкласс UIImageView для более сложных функций. AsyncImageView работает с URL-адресами, поэтому его можно использовать с локальными или удаленными файлами.

Загруженные/загруженные изображения хранятся в памяти и автоматически очищаются в случае предупреждения о памяти. AsyncImageView работает независимо от кеша UIImage, но по умолчанию любые изображения, расположенные в корневом каталоге приложения, будут храниться в кеше UIImage, избегая дублирования кэшированных изображений.

Библиотека также может использоваться для загрузки и кеширования изображений независимо от UIImageView, поскольку обеспечивает прямой доступ к основным классам загрузки и кэширования.

1

Вместо прокрутки View возьмите UITableView и настройте UITableViewCell с помощью собственной реализации и используйте ячейки. Он будет работать с любой проблемой памяти.

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