1

我正在开发 iPhone 应用程序。我正在使用 NSThread 连续调用包含 C++ 代码的函数。当我使用 NSThread 或 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),^{ 函数调用 } 然后它在 5 分钟后给我“收到内存警告”警告并使应用程序崩溃。但是当我在主线程/队列上运行这个函数时它就可以工作了确实。

我也尝试过 Xcode 分析器来检查内存泄漏,但没有发现内存泄漏。

我该如何解决这个问题?

提前致谢。

4

2 回答 2

1

Instruments 可能看不到所有的内存泄漏,尤其是当您通过传递保留函数调用某些 C 代码时。

在不知道您的线程包含什么的情况下很难给您答案,但您可能想检查您的代码中是否存在未释放的对象/错误释放/销毁的对象。

您还应该检查您没有创建一大堆线程(NSThread),并且它们在终止后正确地释放了它们的内容。

顺便说一句,您的应用程序不应在收到内存警告时终止,这是来自操作系统的正常消息。viewWillUnload当/didReceivedMemoryWarning函数被调用时检查你的释放。

您还应该尝试使用模拟器手动创建内存警告

于 2012-05-24T12:55:16.467 回答
1

我在后台线程上使用 NSOperationQueue 时遇到了类似的问题。假设您已经在函数中声明了强制 NSAutoreleasePool ,您可以尝试自己分配/释放对象,除非必要,否则不要使用自动释放,以确保及时释放内存。

第二个建议是使用 Instruments and Allocations,看看究竟是什么占用了你的内存。可能您有一些对象被保留而没有在应该被释放的时候被释放。当谈到这个http://www.friday.com/bbum/2010/10/17/when-is-a-leak-not-a-leak-using-heapshot-analysis-to-find时,这篇文章令人惊叹-undesirable-memory-growth/你也可以在这里找到一些有用的信息http://www.cimgf.com/2008/04/02/cocoa-tutorial-fixing-memory-leaks-with-instruments/

否则...您需要发布更多详细信息。

祝你好运!

于 2012-05-24T14:49:30.703 回答