title: Possible optimization to unload the views+controllers which are no longer visible in UIScrollView and PageControl
body: <p>I have this page control code same from the apple sample. Here i have a subview (controller.view) which contains a ImageView. Now problem is with memory management. All works fine. But when i scroll 5-10 pages. RAM gets filled. 
  I tried to release the view+controller but did not find any proper place/way that work. I want to release the views which are not currently visible. (except current,previous &amp; next view)</p>
  
  <pre><code>- (void)applicationDidFinishLaunching:(UIApplication *)application {
      NSMutableArray *controllers = [[NSMutableArray alloc] init];
      for (unsigned i = 0; i &lt; kNumberOfPages; i++) {
          [controllers addObject:[NSNull null]];
      }
      self.viewControllers = controllers;
      [controllers release];
  
      scrollView.pagingEnabled = YES;
      scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * kNumberOfPages, scrollView.frame.size.height);
      scrollView.showsHorizontalScrollIndicator = NO;
      scrollView.showsVerticalScrollIndicator = NO;
      scrollView.scrollsToTop = NO;
      scrollView.delegate = self;
  
      pageControl.numberOfPages = kNumberOfPages;
      pageControl.currentPage = 0;
  
      [self loadScrollViewWithPage:0];
      [self loadScrollViewWithPage:1];
  }
  - (void)loadScrollViewWithPage:(int)page {
      if (page &lt; 0) return;
      if (page &gt;= kNumberOfPages) return;
  
      PageControlExampleViewControl *controller = [viewControllers objectAtIndex:page];
      if ((NSNull *)controller == [NSNull null]) {
          controller = [[PageControlExampleViewControl alloc] initWithPageNumber:page];
          [viewControllers replaceObjectAtIndex:page withObject:controller];
          [controller release];
      }
  
      if (nil == controller.view.superview) {
          CGRect frame = scrollView.frame;
          frame.origin.x = frame.size.width * page;
          frame.origin.y = 0;
          controller.view.frame = frame;
          [scrollView addSubview:controller.view];
      }
  }
  
  - (void)scrollViewDidScroll:(UIScrollView *)sender {
    if (pageControlUsed) {
          return;
      }
      CGFloat pageWidth = scrollView.frame.size.width;
      int page = floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
      pageControl.currentPage = page;
  
      [self loadScrollViewWithPage:page - 1];
      [self loadScrollViewWithPage:page];
      [self loadScrollViewWithPage:page + 1];
  
  }
  - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
      pageControlUsed = NO;
  }
  - (IBAction)changePage:(id)sender {
      int page = pageControl.currentPage;
      [self loadScrollViewWithPage:page - 1];
      [self loadScrollViewWithPage:page];
      [self loadScrollViewWithPage:page + 1];
      CGRect frame = scrollView.frame;
      frame.origin.x = frame.size.width * page;
      frame.origin.y = 0;
      [scrollView scrollRectToVisible:frame animated:YES];
      pageControlUsed = YES;
  }
  </code></pre>