苹果代码中的iPhone内存泄漏

时间:2009-10-07 13:26:50

标签: iphone objective-c cocoa-touch memory-leaks uikit

我在我的iPhone应用程序上通过Instruments运行泄漏,我看到很多泄漏似乎不是来自我的代码。

例如:

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request  
                                                              delegate:operation];
operation.urlConnection = connection;
[connection release];

泄漏告诉我第一行泄漏了1008个字节。这似乎是一个非常标准的alloc init和一个版本。提到的其他泄漏在UIKit和WebKit中。

这些泄漏事实上是否可能存在于Apple的框架中,或者我的代码和泄漏更有可能无法准确显示信息?

5 个答案:

答案 0 :(得分:5)

完全有可能Apple的框架漏掉了它们(不管它看起来多么不可能) - 在3.0 GM版本的iPhone核心数据实现中有几个。

当您怀疑这样的事情是尝试从Apple查找使用您正在查看的功能的示例项目或尽可能减少您自己的代码(可能构建一个最小的副项目)时应该做什么用仪器测试。如果您可以可靠地重现泄漏,请向Apple提交错误。

答案 1 :(得分:4)

您是否正在使用NSZombieEnabled?这将导致伪造的“泄漏”出现在仪器中。

答案 2 :(得分:2)

我认为这是你的泄密所在:

operation.urlConnection = connection;

您可能无法在operation中进行适当的内存管理。

答案 3 :(得分:0)

除此之外,您是否尝试在设备上测试应用而不是模拟器? 在模拟器上运行仪器不是非常准确和可靠。 也可以试试这个http://www.tuaw.com/2009/09/08/xcode-3-2-daily-tip-analyzing-your-code/

答案 4 :(得分:0)

你是否在其他地方保留了对你的委托对象的引用?

如果您考虑一下,如果您没有其他参考,Leaks会认为委托是泄密但仍保留。另外,如何在请求完成后释放您的委托(命名操作)?