1

Ну, управление памятью делает меня сумасшедшим!Загрузка нескольких локальных изображений без предупреждения памяти

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

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

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

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

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

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

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

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 изображений для экземпляра.

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

Любые предложения?

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

ответ

3

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

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

+0

Действительно спасибо человеку, я попробую и вернусь позже, чтобы рассказать вам, что я сделал! –