2009-01-24 67 views
4

当我使用泄漏运行我的应用程序并查看任何泄漏的扩展详细信息时,它将我带到我的代码中的特定行,但之后我不知道该怎么办!iPhone开发 - 防止泄漏

例如,泄漏显示一个malloc在该行

NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 

但我不知道问题出在什么样的语句!有人能告诉我如何解释这些问题并避免泄漏。

谢谢。

编辑: 关于我以前的问题,NSZombieEnabled确保没有对象被释放,这增加了内存使用量。因此,在使用泄漏进行测试时,请确保将此设置从您的应用中删除。认为这可能有助于某人。

回答

3

找到了答案。弗雷德里克的回答让我想到了。我创建了一个NSURLResponse和NSError的实例,然后传递给sendSynchronousRequest方法。根据iPhone的内存管理文件,这不应该这样做。我们只需要将对NSURLResponse和NSError对象的引用传递给方法,并且方法负责创建和释放对象。

希望能帮助别人。非常感谢大家的回答。

1

扩展详细信息窗格将为您提供堆栈跟踪,显示泄漏处的堆栈。一般来说,开始的一个好地方是查看你的代码在堆栈中的最后一个方法,并且看看你在那里做了什么记忆,这听起来像你可能会过度保留一个对象。从那里开始

+0

嗨科林。扩展详细信息窗格不显示在僵尸对象情况下导致泄漏的类或方法。这就是我发布这个问题的原因。我如何知道僵尸对象的创建地点?谢谢。 – lostInTransit 2009-01-24 06:15:50

+0

你可以显示你所看到的截图吗?你的iPhone操作系统版本是你的目标? – 2009-01-24 20:17:42

1

您在通话后是否释放响应和错误对象?这些可能在呼叫中分配。

+0

嗨弗雷德里克。如果我释放响应和错误对象,它会在该位置显示malloc,再次泄漏!当我回到我的Mac时,我会张贴更多的代码和日志。谢谢。 – lostInTransit 2009-01-24 12:34:01

1

上面提到的方法中的泄漏应该是针对iPhone OS 2.2版本修复的。你使用的是哪个版本的iPhone OS?