我在我的iPhone应用程序上通过Instruments运行泄漏,我看到很多泄漏似乎不是来自我的代码。
例如:
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request
delegate:operation];
operation.urlConnection = connection;
[connection release];
泄漏告诉我第一行泄漏了1008个字节。这似乎是一个非常标准的alloc init和一个版本。提到的其他泄漏在UIKit和WebKit中。
这些泄漏事实上是否可能存在于Apple的框架中,或者我的代码和泄漏更有可能无法准确显示信息?
答案 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会认为委托是泄密但仍保留。另外,如何在请求完成后释放您的委托(命名操作)?