2012-01-07 55 views
1

分析工具在此行代碼中提供了潛在的泄漏。在123行上分配的對象的潛在泄漏並存儲在'頁面'中

for (int index = firstNeededPageIndex; index <= lastNeededPageIndex; index++) { 

任何人都可以幫忙,因爲我無法弄清楚。

下面是代碼

- (void)tilePages 
{ 


    // Calculate which pages are visible 
    CGRect visibleBounds = pagingScrollView.bounds; 
    int firstNeededPageIndex = floorf(CGRectGetMinX(visibleBounds)/CGRectGetWidth(visibleBounds)); 
    int lastNeededPageIndex = floorf((CGRectGetMaxX(visibleBounds)-1)/CGRectGetWidth(visibleBounds)); 
    firstNeededPageIndex = MAX(firstNeededPageIndex, 0); 
    lastNeededPageIndex = MIN(lastNeededPageIndex, [self imageCount] - 1); 

    // Recycle no-longer-visible pages 
    for (ImageScrollView *page in visiblePages) { 
     if (page.index < firstNeededPageIndex || page.index > lastNeededPageIndex) { 
      [recycledPages addObject:page]; 
      [page removeFromSuperview]; 
     } 
    } 
    [visiblePages minusSet:recycledPages]; 

    // add missing pages 
    for (int index = firstNeededPageIndex; index <= lastNeededPageIndex; index++) { 
     if (![self isDisplayingPageForIndex:index]) { 
      ImageScrollView *page = [self dequeueRecycledPage]; 
      if (page == nil) { 
       page = [[ImageScrollView alloc] init]; 
      } 
      [self configurePage:page forIndex:index]; 
      [pagingScrollView addSubview:page]; 
      [visiblePages addObject:page]; 

     } 
    }  

} 

回答

1

你永遠不放開你分配你的代碼段底部的頁面的其餘部分(假設你沒有使用ARC)

0

將會有泄漏,如果「頁面」加到recycledPages// Recycle no-longer-visible pages部分永遠不會在// add missing pages部分重複使用。

我不能在你的函數中看到recycledPages的聲明,因此我假設它們與你的視圖(或另一個對象)綁定。然後,您需要在終止或關閉視圖(或其他任何可識別的情況)時釋放未使用的回收頁面。

如果你真的這樣做了,那麼分析工具可能不夠「明亮」以識別它。