iPhone开发 - 防止泄漏

时间:2009-01-24 05:02:50

标签: iphone ios memory-management memory-leaks

当我使用Leaks运行我的应用程序并查看任何泄漏的扩展详细信息时,它会将我带到我的代码中的特定行,但我不知道该怎么做!

例如,Leaks在这一行显示了一个malloc

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

但我不知道声明中的问题是什么!有人可以告诉我如何解释这些问题并避免泄漏。

感谢。

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

4 个答案:

答案 0 :(得分:3)

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

希望能帮到别人。非常感谢大家的答案。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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