Прекращено из-за ошибки памяти при загрузке количества изображений в UIScrollView

Я использую UIScrollView в своем приложении, которое загружает количество изображений (более 200 изображений).

Я загружаю изображения с диска и просто добавляю их в UIScrollView. Я получаю сообщение об ошибке Xcode 5 «Прекращено из-за ошибки памяти», и приложение неожиданно завершается. Но не каждый раз, когда это происходит время от времени.

Я до сих пор не уверен, что это проблема с памятью. Но я не нашел причину проблемы с памятью.

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

Я создал пользовательский повторно используемый класс UIView с помощью пользовательского класса 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