调用SBJSON时出现奇怪的内存泄漏

发布于 2024-12-09 23:50:45 字数 605 浏览 0 评论 0原文

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

在此处输入图像描述

检测到此泄漏在本次特定运行中,大约需要执行 15 分钟,并且完全无法预测何时会发生。 Instruments 表示泄漏的内存属于 NSNumber 类型,并且该突出显示的行包含在一个方法中,该方法在应用程序的执行过程中始终被调用。我尝试将 _source 字符串的值输出到控制台,但发生泄漏时的输出没有什么奇怪的。这是另一个屏幕截图,显示了泄漏块的历史记录:

在此处输入图像描述

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

I've been thoroughly testing my app using the Leaks tool in Instruments, and occasionally a leak comes up when using SBJSON. Having looked over the net it appears that SBJSON tends not to leak by itself, so it must be the way I am calling it. Here's a screenshot of the offending line in my code, pointed to by the Leaks instrument:

enter image description here

This leak is detected about 15 minutes into execution in this particular run, and is completely unpredictable in when it may happen. Instruments says the leaked memory is of type NSNumber, and this highlighted line is contained in a method that is called all the time throughout the execution of the app. I've tried outputting the value of the _source string to the console but there's nothing strange about the output when the leak occurs. Here's another screenshot showing the history of the leaked block:

enter image description here

I am running the app on the iPhone 4.2 simulator, and my testing basically involves clicking around every view in the application to make sure it all runs okay. As you may be able to see in the screenshot above, the JSONValue call goes to the method defined in NSString+SBJSON.m so I'm pretty sure if there is a problem it's in my code. Any idea what I am doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

青春如此纠结 2024-12-16 23:50:45

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

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

[_object release];

When you assign _object = [[_source JSONValue] retain]; you increase reference count of object returned by JSONValue. In method initWithData:(NSData *)data this object is not released. So Analyzer thinks that there is memory leak.

You should check if you are releasing _object before losing reference to it or in dealloc method:

[_object release];
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文