UIScrollview + UIimageviews memory crash

Discussion in 'iOS Programming' started by igorladessa, Dec 10, 2012.

  1. igorladessa macrumors newbie

    Dec 10, 2012
    I need to scroll over 200 images. I ahve found a tutorial that says that I can over 1000 images with the tutorial code. The tutorial is:


    I followed the tutorial, but when I use 100 images aprox..the app crash with memory warning.

    My code is here:


    I have already with UIIMagenamed, with initWithContentsOfFile

    but the problem persist. Pls , help me!
  2. Ides macrumors member

    Mar 27, 2012
    Well how big are the images you're loading? If they are very large then they will cause memory warnings, if you're loading 100+.
  3. igorladessa thread starter macrumors newbie

    Dec 10, 2012

    1,5 mb
  4. PhoneyDeveloper macrumors 68040


    Sep 2, 2008
    Use a tableview if you can. Otherwise set things up so that only a small number of image views exist at a time. Unload the image views when they scroll off.
  5. dejo Moderator


    Staff Member

    Sep 2, 2004
    The Centennial State
    Those are quite large. You might want to consider creating thumbnail versions for display most of the time.

    Yeah, UICollectionView (iOS 6) might be a good solution, if UITableView is not, because it works similar in that cells are reused.
  6. igorladessa, Dec 12, 2012
    Last edited by a moderator: Dec 12, 2012

    igorladessa thread starter macrumors newbie

    Dec 10, 2012

    I release all ImageViews and load the current and next imageView, when scrolling!

    - (void)scrollViewDidScroll:(UIScrollView *)scrollView
    CGPoint scrollOffset=scrollView.contentOffset;
    int pagAtual = scrollOffset.x/scroll.frame.size.width;
    if(pagAtual != 0) { //always release all imageViews and load the current and next
    for(int iCnt = 0; iCnt < [scroll.subviews count]; iCnt++) {
        UIView *viewLiberar = [scroll.subviews objectAtIndex:iCnt];
     if ([viewLiberar isKindOfClass:UIImageView.class]) {
        [viewLiberar removeFromSuperview];
         viewLiberar = nil;
    if(pageOnScrollView < ((int)scrollOffset.x/scroll.frame.size.width))
     //load the next page
    [self loadNextPage:(pagAtual)];
    [self loadNextPage:(pagAtual + 1)];
    else if(pageOnScrollView > ((int)scrollOffset.x/scroll.frame.size.width))
      if(pagAtual>0)[self loadNextPage:((int)scrollOffset.x/scroll.frame.size.width)-1];
    It works!

Share This Page