在123行上分配的对象的潜在泄漏并存储在'页面'中
问题描述:
分析工具在此行代码中提供了潜在的泄漏。在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];
}
}
}
答
你永远不放开你分配你的代码段底部的页面的其余部分(假设你没有使用ARC)
答
将会有泄漏,如果“页面”加到recycledPages
的// Recycle no-longer-visible pages
部分永远不会在// add missing pages
部分重复使用。
我不能在你的函数中看到recycledPages
的声明,因此我假设它们与你的视图(或另一个对象)绑定。然后,您需要在终止或关闭视图(或其他任何可识别的情况)时释放未使用的回收页面。
如果你真的这样做了,那么分析工具可能不够“明亮”以识别它。