iPhone开发-防止内存泄漏

4
当我使用Leaks运行我的应用程序并查看任何泄漏的扩展细节时,它会带我到代码中的特定行,但是我不知道接下来该怎么做!
例如,Leaks在此行显示了一个malloc。
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

但我不知道这个陈述中的问题是什么!请问有人能告诉我如何解释这样的问题并避免泄漏。

谢谢。

编辑: 关于之前我的问题,NSZombieEnabled确保没有对象被释放,这会增加内存使用量。因此,在使用Leaks进行测试时,请确保从您的应用程序中删除此设置。希望这可以帮助某些人。

4个回答

3

找到了答案。Fredrik的回答让我思考。我正在创建NSURLResponse和NSError的实例,然后将其传递给sendSynchronousRequest方法。根据iPhone的内存管理文档,不应该这样做。我们只需要将NSURLResponse和NSError对象的引用传递给方法,方法会负责创建和释放对象。

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


2

扩展细节面板将向您显示堆栈跟踪,以显示泄漏时的堆栈。通常,开始查看方法和堆栈中代码的最后一个方法,并查看您在那里使用了多少内存是一个不错的起点,听起来您可能会过度保留一个对象。从那里开始。


嗨,Colin。在僵尸对象的情况下,扩展细节窗格没有显示导致泄漏的类或方法。这就是我发布问题的原因。我怎么知道僵尸对象是在哪里创建的?谢谢。 - lostInTransit
你能展示一下你所看到的屏幕截图吗?另外,你的目标是哪个iPhone操作系统版本? - Colin Wheeler

1
你在调用后是否释放了响应和错误对象?这些对象可能是在调用中分配的。

嗨,弗雷德里克。如果我释放响应和错误对象,它会在那个位置显示一个malloc,再次泄漏!当我回到我的Mac时,我会发布更多的代码和日志。谢谢。 - lostInTransit

1

你提到的方法中存在一个泄漏问题,应该在iPhone OS 2.2版本中得到修复。你使用的是哪个版本的iPhone OS?


我正在使用2.1版本,在2.2发布之前创建了该项目。你确定这个问题在2.2中得到了解决吗?谢谢。 - lostInTransit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接