我正在开发iPhone App。我正在使用NSThread连续调用包含C ++代码的函数。 当我使用NSThread或dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^ { 功能调用 } 然后它在5分钟后给我“收到内存警告”警告并使应用程序崩溃。 但是当我在主线程/队列上运行这个函数时,它就可以正常工作。
我也尝试过Xcode探测器来检查内存泄漏,但没有发现内存泄漏。
我该如何解决这个问题?
提前感谢。
答案 0 :(得分:1)
仪器可能看不到所有内存泄漏,特别是如果您通过传递保留功能调用某些C代码。
很难在不知道你的线程包含什么的情况下给你一个答案,但你可能想要检查你的代码是否有未发布的对象/错误释放/销毁的对象。
您还应检查您是否创建了一大堆线程(NSThread
),并确保它们在终止后正确释放其内容。
顺便说一句,你的应用程序不应该在收到内存警告时终止,这是来自操作系统的正常消息。调用viewWillUnload
/ didReceivedMemoryWarning
函数时检查您的释放。
您还应该尝试使用模拟器手动创建内存警告
答案 1 :(得分:1)
我在后台线程上使用NSOperationQueue时遇到了类似的问题。 假设您已经在函数中声明了强制NSAutoreleasePool,您可以尝试自己分配/释放对象,除非必要,否则不要使用自动释放,以确保按时释放内存。
第二个建议是使用仪器和分配,看看究竟是什么占用了你的记忆。可能你有一些对象被保留,而不应该被释放。这篇文章对于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/
否则......您需要发布更多详细信息。
祝你好运!