在第123行分配的对象的潜在泄漏并存储在“页面”中

时间:2012-01-07 18:07:46

标签: objective-c memory-leaks

分析工具可能会泄漏此代码行。

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];

        }
    }    

}

2 个答案:

答案 0 :(得分:1)

您永远不会释放您在代码段底部分配的页面(假设您没有使用ARC)

答案 1 :(得分:0)

如果recycledPages部分// Recycle no-longer-visible pages中添加的“页面”永远不会在// add missing pages部分重复使用,则会出现泄漏。

我无法在您的函数中看到recycledPages的声明,因此我认为它们与您的视图(或其他对象)相关联。然后,您需要在终止或关闭视图(或您认可的任何其他条件)时释放未使用的已回收页面。

如果你确实这样做了,那么分析工具可能不够“足够明亮”来识别它。