Memory ScrollView内存问题

Memory ScrollView内存问题,memory,uiimageview,warnings,scrollview,automatic-ref-counting,Memory,Uiimageview,Warnings,Scrollview,Automatic Ref Counting,我正试图将50张png图像加载到scrollview中,我选择了延迟加载。但我仍然有很大的内存问题,当我滚动30页时,我的应用程序崩溃了 请帮助我理解为什么会发生这种情况,我的代码是: UIImage *1 = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"30" ofType:@"png"]]; .... imageArray = [NSArray arrayWithObjects:1,2,3

我正试图将50张png图像加载到scrollview中,我选择了延迟加载。但我仍然有很大的内存问题,当我滚动30页时,我的应用程序崩溃了

请帮助我理解为什么会发生这种情况,我的代码是:

UIImage *1 = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"30" ofType:@"png"]];
....
imageArray = [NSArray arrayWithObjects:1,2,3,4, ...];

- (void)loadPage:(NSInteger)page 
{
    if (page < 0 || page >= imageArray.count) 
    {
        return;
    }

    UIView *pageView = [pageViews objectAtIndex:page];
    if ((NSNull*)pageView == [NSNull null]) 
    {

        CGRect frame = self.scrollView.bounds;
        frame.origin.x = frame.size.width * page;
        frame.origin.y = 0.0f;


        UIImageView *newPageView = [[UIImageView alloc] initWithImage:[imageArray objectAtIndex:page]];
        newPageView.contentMode = UIViewContentModeScaleAspectFit;
        newPageView.frame = frame;
        [self.scrollView addSubview:newPageView];
        [pageViews replaceObjectAtIndex:page withObject:newPageView];
    }
}


- (void)purgePage:(NSInteger)page 
{
    if (page < 0 || page >= imageArray.count) 
    {
        return;
    }

    UIView *pageView = [pageViews objectAtIndex:page];
    if ((NSNull*)pageView != [NSNull null]) 
    {
        [pageView removeFromSuperview];
        [pageViews replaceObjectAtIndex:page withObject:[NSNull null]];
    }
}


- (void)loadVisiblePages 
{
    CGFloat pageWidth = self.scrollView.frame.size.width;
    NSInteger page = (NSInteger)floor((self.scrollView.contentOffset.x * 2.0f + pageWidth) / (pageWidth * 2.0f));

    self.pageControl.currentPage = page;

    // Work out which pages you want to load
    NSInteger firstPage = page - 1;
    NSInteger lastPage = page + 1;

    // Purge anything before the first page
    for (NSInteger i=0; i<firstPage; i++) 
    {
        [self purgePage:i];
    }

    for (NSInteger i=firstPage; i<=lastPage; i++) 
    {
        [self loadPage:i];
    }

    for (NSInteger i=lastPage+1; i<imageArray.count; i++) 
    {
        [self purgePage:i];
    }

    NSString *string = [NSString stringWithFormat:@"%i.png",page+1];
    layer = [UIImage imageNamed:string];
}
UIImage*1=[UIImage-imageWithContentsOfFile:[[NSBundle mainBundle]pathForResource:@“30”,类型:@“png”];
....
imageArray=[NSArray arrayWithObjects:1,2,3,4,…];
-(无效)加载页:(NSInteger)页
{
如果(第<0 | |页>=imageArray.count)
{
回来
}
UIView*pageView=[pageViews objectAtIndex:page];
如果((NSNull*)页面视图==[NSNull])
{
CGRect frame=self.scrollView.bounds;
frame.origin.x=frame.size.width*页;
frame.origin.y=0.0f;
UIImageView*newPageView=[[UIImageView alloc]initWithImage:[imageArray objectAtIndex:page]];
newPageView.contentMode=UIViewContentModeScaleAspectFit;
newPageView.frame=frame;
[self.scrollView addSubview:newPageView];
[pageViews replaceObjectAtIndex:page with Object:newPageView];
}
}
-(无效)清除页:(NSInteger)页
{
如果(第<0 | |页>=imageArray.count)
{
回来
}
UIView*pageView=[pageViews objectAtIndex:page];
如果((NSNull*)页面视图!=[NSNull])
{
[pageView从SuperView移除];
[pageViews replaceObjectAtIndex:page withObject:[NSNull]];
}
}
-(无效)加载可视页面
{
CGFloat pageWidth=self.scrollView.frame.size.width;
NSInteger页面=(NSInteger)地板((self.scrollView.contentOffset.x*2.0f+pageWidth)/(pageWidth*2.0f));
self.pageControl.currentPage=page;
//确定要加载的页面
NSInteger firstPage=第1页;
NSInteger lastPage=第+1页;
//清除第一页之前的任何内容

对于(NSInteger i=0;i您应该在将newPageView添加到pageViews数组后释放它。

我发现问题,它正在创建newPageView。因此我将其更改为以下内容,我的应用程序现在不会崩溃

UIImageView *newPageView = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:string ofType:@"png"]]];

感谢您的帮助。

在puragePage:,将pageView=nil替换为NSNull实例后,请将其设置为nil。查看这是否会给您带来更好的性能结果。