Загрузка нескольких локальных изображений без предупреждения памяти - PullRequest
1 голос
/ 13 февраля 2012

Ну, управление памятью сводит меня с ума!

Вот моя проблема:

У меня есть список с n ссылками на изображения.Я просто пытаюсь захватить каждого ребенка и загрузить его в UIImageView, который добавляется в UIScrollView с включенной подкачкой страниц.

Мои проблемы:

  • У меня n изображений,Может быть только 3, но может быть 60 или более.
  • Каждое изображение имеет значительное разрешение (1152x1536), потому что оно масштабируемое.

Я прочитал о CATiledLayer и увидел образец PhotoScroller, но я хочу избегать использования CATiledLayer, потому что он создает затухание при отображении фрагментов изображения, и в моем проекте этот эффект не подходит.

Я просто хочу услышать ваше мнение, как вы обычнорешить такие задачи?

Я оставлю здесь часть своего кода:

UIImage * image;
UIImageView * imageview;

for (int i = 0; i < [data count]; i++)
{
    image = [[UIImage alloc] initWithContentsOfFile:[NSString stringWithFormat:@"%@/%@",
                                                     [[NSBundle mainBundle] bundlePath],
                                                     [[data objectAtIndex:i] objectForKey:@"content"]]];

    [content addObject:image];

    imageview = [[UIImageView alloc] initWithImage: [content objectAtIndex:i] ];
    [imageview setTag:i+10];
    imageview.frame = CGRectMake(1024 * i, 0, 1024, 768);

    [scroll addSubview: imageview];

    [imageview release];
    [image release];
}

[scroll setContentSize:CGSizeMake(1024*[data count], 768)];

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

Я думаю, вы поняли идею, верно?

Есть какие-нибудь предложения?

Спасибо за вашу помощь заранее!

1 Ответ

3 голосов
/ 13 февраля 2012

Если вы хотите избежать проблем с памятью, не следует загружать их все сразу, только тогда, когда они необходимы.Чтобы сделать это, вы можете просто следовать примеру, предоставленному Apple, здесь .

По сути, вы загружаете только три изображения: одно, которое показывает прямо сейчас, и те, которые показываютразмещены справа и слева.Затем, когда вы прокручиваете, скажем, вправо, вы удаляете тот, который был ранее на левой стороне, и помещаете новое изображение на правом конце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...