分析工具可能会泄漏此代码行。
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];
}
}
}
答案 0 :(得分:1)
您永远不会释放您在代码段底部分配的页面(假设您没有使用ARC)
答案 1 :(得分:0)
如果recycledPages
部分// Recycle no-longer-visible pages
中添加的“页面”永远不会在// add missing pages
部分重复使用,则会出现泄漏。
我无法在您的函数中看到recycledPages
的声明,因此我认为它们与您的视图(或其他对象)相关联。然后,您需要在终止或关闭视图(或您认可的任何其他条件)时释放未使用的已回收页面。
如果你确实这样做了,那么分析工具可能不够“足够明亮”来识别它。