Прекратено поради грешка в паметта при зареждане на брой изображения в UIScrollView

Използвам UIScrollView в моето приложение, което зарежда брой изображения (повече от 200 изображения).

Зареждам изображения от диска и просто добавям в UIScrollView. Получавам съобщение за грешка на Xcode 5 „Прекратено поради грешка в паметта“ и приложението е прекратено неочаквано. Но не всеки път, когато това се случва от време на време.

Все още не съм напълно сигурен, че това е проблем с паметта. Но не открих причината за кода за проблема с паметта.

Дори аз проверих проблема с изтичане на памет чрез инструмента на инструмента, няма изтичане на памет.

Създадох персонализиран многократно използваем UIView клас с помощта на Custom ACReuseQueue за UIScrollView като UITableView поради ефективността и отнемането на време при създаването на обекта

Приложих концепция за поставяне в опашка и изваждане от опашка вътре в scrollViewDidScroll:

За да добавите изображение в UIScrollView: използва следния код

-(void)imageAdd:(ALAsset *)item
{
__block ImageControl    *imageControl;
imageControl = (ImageControl*)[[ACReuseQueue defaultQueue]       dequeueReusableObjectWithIdentifier:@"ImageControl"];
    [imageControl setAlAsset:item];
    [imageControl setDuration:1.0];
    [imageControl setIsCopy:NO];

    [self.galleryView addItem:imageControl];
    [imageControl release];
}

кодът по-долу се използва, когато потребителят превърта ScrollView

-(void)scrollViewDidScroll:(UIScrollView*)scrollView
{
for (ImageControl *imageControl in self.galleryView.items)
{

    if (CGRectIntersectsRect(imageControl.frame, self.galleryView.bounds))
    {
        imageControl = (ImageControl*)[[ACReuseQueue defaultQueue] dequeueReusableObjectWithIdentifier:@"ImageControl"];


        [self.galleryView addItem:imageControl];


    }
    else
    {
        [imageControl removeFromSuperview];
        [[ACReuseQueue defaultQueue] enqueueReusableObject:imageControl];

    }
}
}

Все пак не постигнах UIScrollView за многократна употреба като UITableView


person Stalin Pusparaj    schedule 21.02.2014    source източник
comment
Вашите изображения са твърде големи. Не е необходимо да изтичат, ако продължавате да ги добавяте и те са големи. Ще трябва да използвате клетъчна стратегия или нещо подобно и да премахнете от паметта изображения, които вече не са на екрана.   -  person Jason Coco    schedule 21.02.2014


Отговори (1)


Не зареждайте всички изображения едновременно. Повечето така или иначе не се виждат.

Използването на табличен изглед вероятно ще направи живота ви много по-лесен и ще бъде най-бързият начин да заредите само необходимите изображения.

Ако искате да използвате обикновен изглед за превъртане, трябва да внедрите метода на делегат scrollViewDidScroll: и да го използвате за добавяне и премахване на подизгледи, докато потребителят превърта изгледа.

person Wain    schedule 21.02.2014