为什么仪器报告泄漏,而其参考计数确实为零

时间:2010-12-18 17:43:56

标签: iphone memory-leaks instruments zero refcounting

我是绿手。我正在使用乐器,到目前为止它对我有很大的帮助,但我现在很困惑因为它报告了一个内存泄漏给我,而它泄漏的块历史告诉我该内存的引用计数最终变为0这是什么意思?
我无法在这里发布图片真的很尴尬......所以我必须在文字中描述它。希望它对你来说足够清楚:

事件类型|| RefCt ||负责任的图书馆||负责的来电者 Malloc || 1 || MyWeather || + [ForecastData parseSingleForecastWithXMLElement:]
自动释放||  || MyWeather || + [ForecastData parseSingleForecastWithXMLElement:]
保留|| 2 || MyWeather || + [ForecastData parseWithData:]
发布|| 1 || 基金会|| + [NSAutoreleasePool排水:]
保留|| 2 || 基金会|| + [NSThread initWithTarget:selector:object:]
发布|| 1 || 基金会|| + [NSString比较:选项:]
发布|| 0 || MyWeather || + [RootViewController dealloc]

任何帮助将不胜感激〜

3 个答案:

答案 0 :(得分:4)

这是由于在ForecastData的dealloc中缺少[super dealloc]引起的,因此在从dataData的保留计数变为零时,从不释放forecastData的部分内存。无论如何,谢谢你们。

答案 1 :(得分:0)

你没有提供太多示例代码,所以它可以是任何东西。 MyWeather的RefCount为零,但是Foundation仍然是一个,所以也许你在任何地方分配了一个从未发布的NSSting?

顺便说一句。我永远不会分配init-init字符串,而是直接设置文本,让内存管理完成剩下的工作。我不知道为什么,但我认为这是一个小马车。如果我尝试这样的话,有时我会遇到奇怪的错误:

NSString *str = [[NSString alloc] initWithString:@"some Text"];
myLabel.text = str;
[str release];

myLabel应该保留它,但事实并非如此。如果我尝试release,我会收到错误。 (如果没有泄漏)

如果我使用

NSString *str = @"some Text";
myLabel.text = str;

效果很好,没有错误也没有泄漏。

答案 2 :(得分:0)

你在设备上试过吗?有时您会看到漏洞显示并非真正泄漏。

另一个原因可能是你启用了NSZombie,这意味着对象实际上没有被释放。