Iphone 在scroll view iPad上加载大尺寸图像时崩溃

Iphone 在scroll view iPad上加载大尺寸图像时崩溃,iphone,Iphone,我有31张图片,尺寸为1448*2048。我必须将其添加到滚动视图中,并在iPad上水平交换。但问题是当我交换第六张图片时。它因内存警告而崩溃 我使用了developer.apple.com中页面控制示例的逻辑。 在这个类的ViewDidload中,我设置了与页面控件示例相同的滚动视图框架 我的页面加载代码函数是 - (void)loadPage:(int)page { if (page < 0) return; if (page >= [_imgArray count

我有31张图片,尺寸为1448*2048。我必须将其添加到滚动视图中,并在iPad上水平交换。但问题是当我交换第六张图片时。它因内存警告而崩溃

我使用了developer.apple.com中页面控制示例的逻辑。 在这个类的ViewDidload中,我设置了与页面控件示例相同的滚动视图框架

我的页面加载代码函数是

- (void)loadPage:(int)page 
{

 if (page < 0) return;
    if (page >= [_imgArray count]) return;

    // replace the placeholder if necessary aViewController is NSMutable Array.
    ImageViewC *controller = [aViewControllers objectAtIndex:page];
    if ((NSNull *)controller == [NSNull null]) {

        controller = [[ImageViewC alloc] initWithImage:[_imgArray objectAtIndex:page]];
  //controller.screen = currentPage;
  [aViewControllers replaceObjectAtIndex:page withObject:controller];
        [controller release];
    }

    // add the controller's view to the scroll view
    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
{

    // Switch the indicator when more than 50% of the previous/next page is visible
    CGFloat pageWidth = scrollView.frame.size.width;
    int page = floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;

    self.currentPage = floor(scrollView.contentOffset.x / pageWidth) + 1;
    // load the visible page and the page on either side of it (to avoid flashes when the user starts scrolling)
    [self loadPage:page - 1];
    [self loadPage:page];
    [self loadPage:page + 1];

 if (page == -1) 
  return;
}

有人能帮我吗。请修改如何管理内存的代码,这样我就可以在这个卷轴上交换31个图像。

一个图像占用超过11MB的内存,所以当你看到你的应用程序崩溃时,你不应该感到惊讶

您需要释放不可见的图像,并且您可能还应该对图像进行分区。loadPage:方法看起来过于复杂,我无法理解它在做什么,我也不知道ImageViewC是什么


如果您是Apple的注册开发者,请查看WWDC视频,其中一个是关于UIScrollView的视频,它显示了如何加载许多图像并获得正确的处理。

您应该卸载当前不可见的图像。这将有助于降低内存占用。

讨论中的WWDC示例是2010年的“photoscroller”;代码和视频都可用。两个都很棒!谢谢在这段代码中,imageViewC是控制器类,其中有imageView。你能给uiscrollviews发送wwdc视频的链接吗?这些视频在登录后可以从苹果的网站上获得,它会带你去iTunes。