【问题标题】:Leaking memory from substringWithRange从 substringWithRange 泄漏内存
【发布时间】:2011-08-25 13:52:00
【问题描述】:

仪器通知我,我正在从以下代码 sn-p 泄漏内存

for (int x=0; x<20; x++)
{

LeagueTableRow *aLTR = [[LeagueTableRow alloc] init];   //leaks a certain percentage here

match = [substring rangeOfString: @"text team large-link"];

if (match.location == NSNotFound) 
{
}
if  ((match.location + match.length) > ([substring length]))
{
}

substring = [substring substringFromIndex:(match.location + match.length)];

match2 = [substring rangeOfString: @"title="];
substring = [substring substringFromIndex:(match2.location + match2.length+1)];

match2 = [substring rangeOfString: @">"];

aLTR.teamName = [substring substringToIndex:match2.location-1]; //leaks a percentage here

match2 = [substring rangeOfString: @"number total mp"];
substring = [substring substringFromIndex:(match2.location + match2.length+1)];

match = [substring rangeOfString: @">"];
match2 = [substring rangeOfString: @"<"];



aLTR.played = [substring substringWithRange:NSMakeRange(match.location+1, (match2.location-(match.location+1)))]; //leaks a percentage here

[self.theLeagueTableArray addObject:aLTR];
[aLTR release];

}

仪器通知我泄漏,并且我在代码中评论说有泄漏,它说这条线是一定比例的泄漏的原因。

LeagueTableRow 类是一个非常简单的容器类,其中的每个 var 都会在该类的 dealloc 处释放。

这可能是什么问题?

我在循环开始时分配 aLTR,然后在循环结束时释放 aLTR。 NSString 方法都是自动释放返回的字符串 AFAIK 所以代码看起来很紧凑。

任何人都能够阐明这个令人困惑的情况?构建和分析工具在这里也没有提到任何问题。

非常感谢, -代码

【问题讨论】:

    标签: iphone objective-c ios


    【解决方案1】:
    [self.theLeagueTableArray addObject:aLTR];
    

    如果这个theLeagueTableArray 的支持实例变量从未被释放,那么其中的任何排名表行也不会被释放。检查这个类的 dealloc 方法,并确保变量在那里被释放。

    【讨论】:

      【解决方案2】:

      仪器无法向您显示实际发生泄漏的位置,只能显示泄漏内存的分配位置。

      在您的情况下,完成对属性的分配的第二次泄漏很可能只是原始泄漏的结果。

      原始泄漏是在您的第一条评论中标记的LeagueTableRow 实例。

      这个特定的代码看起来没问题,我会去检查theLeagueTableArray 属性如何处理它的内存。它是否应该在应该释放内存的时候释放内存,实现它的类是否应该释放该属性的后备存储?

      【讨论】:

        【解决方案3】:

        根据我的经验,泄漏的原因通常不是 alloc 调用。您会发现,您将这个 LeagueTableRow 传递给了其他东西,而您却忘记了释放它。

        在保留 LeagueTableRow 实例的任何地方查看您的代码,它没有在某处发布

        【讨论】:

          猜你喜欢
          • 2011-10-05
          • 2011-04-26
          • 2011-10-22
          • 1970-01-01
          • 1970-01-01
          • 2016-12-07
          • 2011-10-08
          • 2013-01-20
          • 2011-10-31
          相关资源
          最近更新 更多