0

我一直在使用 Instruments 中的 Leaks 工具彻底测试我的应用程序,使用 SBJSON 时偶尔会出现泄漏。看过网络后,似乎 SBJSON 本身不会泄漏,所以它一定是我所说的方式。这是我的代码中违规行的屏幕截图,由 Leaks 工具指出:

在此处输入图像描述

在此特定运行中执行大约 15 分钟后检测到此泄漏,并且完全无法预测何时发生泄漏。Instruments 说泄漏的内存是 NSNumber 类型的,并且这条突出显示的行包含在一个方法中,该方法在整个应用程序的执行过程中一直被调用。我已经尝试将 _source 字符串的值输出到控制台,但是当泄漏发生时,输出并没有什么奇怪的。这是另一个显示泄露块历史的屏幕截图:

在此处输入图像描述

我在 iPhone 4.2 模拟器上运行该应用程序,我的测试基本上涉及单击应用程序中的每个视图以确保它运行正常。正如您在上面的屏幕截图中看到的那样,JSONValue 调用转到 NSString+SBJSON.m 中定义的方法,所以我很确定我的代码中是否存在问题。知道我做错了什么吗?

4

1 回答 1

1

当您分配时,_object = [[_source JSONValue] retain];您会增加返回的对象的引用计数JSONValue。在方法initWithData:(NSData *)data中这个对象没有被释放。所以 Analyzer 认为存在内存泄漏。

_object您应该在失去对它的引用之前或在dealloc方法中检查您是否正在释放:

[_object release];
于 2011-10-14T09:11:26.587 回答