0

나는 scrollview 50 PNG 이미지를로드하려고하는데, 느린 로딩으로이 작업을 선택했습니다. 하지만 여전히 큰 메모리 문제가 있습니다. 30 페이지를 스크롤하면 앱이 다운됩니다.ScrollView 메모리 문제

, 내 코드이 일어나고 왜 나를 이해 도와주세요 :

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

에서 puragePage :로 설정하고, NSNull 인스턴스로 바꾸면 pageView = nil로 설정하십시오. 그것이 당신에게 더 나은 성과 결과를 주는지보십시오. – jmstone617

답변

0

문제가 발견되어 newPageView가 생성되었습니다. 그래서 나는 그것을 다음과 같이 변경했고 내 앱은 지금 크래시하지 않는다.

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

감사합니다.

0

당신은 페이지 뷰 배열에 추가 한 후 newPageView을 해제해야합니다.

+0

ARC를 사용할 수 있으므로 수동으로 해제 할 수 없습니다. – Macaret