0

Ich versuche, in einem Scrollview 50 Png Bilder zu laden, und ich wählte dies durch lazy loading. Aber ich habe immer noch große Speicherprobleme, meine App stürzt ab, wenn ich 30 Seiten scrolle.ScrollView Speicherprobleme

Bitte helfen Sie mir zu verstehen, warum dies geschieht, ist mein Code:

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]; 
} 
+0

in puragePage :, setzen Sie pageView = Nil, nachdem Sie es durch eine NSNull-Instanz ersetzen. Sehen Sie, ob das Ihnen ein besseres Leistungsergebnis gibt. – jmstone617

Antwort

0

Ich habe das Problem gefunden, es erstellt newPageView. Also habe ich das geändert und meine App stürzt jetzt nicht ab.

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

Vielen Dank für Ihre Hilfe.

0

Sie sollten newPageView freigeben, nachdem es auf Seiten Array hinzufügen.

+0

Ich habe ARC aktiviert, also kann ich nicht manuell freigeben. – Macaret