我一直在使用仪器中的Leaks工具彻底测试我的应用程序,偶尔使用SBJSON时会出现泄漏。看过网后,SBJSON似乎不会自行泄漏,所以它必须是我称之为的方式。这是我的代码中违规行的屏幕截图,由Leaks工具指出:
在此特定运行中执行约15分钟后检测到此泄漏,并且在可能发生的情况下完全无法预测。 Instruments说泄漏的内存是NSNumber类型,这个突出显示的行包含在一个在应用程序执行过程中一直调用的方法中。我已经尝试将_source字符串的值输出到控制台,但是当泄漏发生时输出没什么奇怪的。这是另一个显示泄漏块历史的屏幕截图:
我正在iPhone 4.2模拟器上运行应用程序,我的测试基本上涉及点击应用程序中的每个视图以确保它运行正常。您可以在上面的屏幕截图中看到,JSONValue调用转到NSString + SBJSON.m中定义的方法,所以我很确定我的代码中是否存在问题。知道我做错了吗?
答案 0 :(得分:1)
分配_object = [[_source JSONValue] retain];
时,会增加JSONValue
返回的对象的引用计数。在方法initWithData:(NSData *)data
中,不会释放此对象。所以Analyzer认为存在内存泄漏。
您应该在失去对它的引用之前或_object
方法中检查您是否要发布dealloc
:
[_object release];