为什么垃圾收集不适用于线程?

时间:2011-02-20 21:52:54

标签: objective-c cocoa garbage-collection nsoperation

我的应用程序中的每一件事情都运行正常,直到我分离一个线程从文件中读取音频数据并处理它。

垃圾收集似乎对这个线程上发生的事情一无所知,无论我做什么。我试过[NSThread self],[NSThread currentThread],[[NSGarbageCollector defaultCollector] collectIfNeeded]和collectExhaustivly]。 我从NSThread转到NSOperation与NSOperationQueue。

这些建议的解决方案都没有奏效。最近,我从NSMutableArrays切换到

Float32* pfArray= calloc(numFloats, sizeof(Float32));

保存我的数据并使用 free(pfArray); 释放那段记忆。这样做效果更好,但仍然泄漏了不错的数量。

垃圾收集似乎在某种程度上开始工作,在活动监视器中指示的“真实存储器”命中某些任意数字,但是当它看起来确实有效时,它不会释放所有正在使用的内存。它只是不会让它远高于任意阈值。

我已经读过GC是要走的路,但现在我不确定并且有一个几乎完全编写的程序。任何建议都会非常有帮助。谢谢!

2 个答案:

答案 0 :(得分:5)

垃圾收集确实适用于应用程序的所有线程。您可能无意中保留了对某些根对象的引用,从而泄漏了一个子图;但是,没有原始代码,可以说不多。

答案 1 :(得分:1)

collectIfNeeded”表示如果不需要收集,它将不收集。

使用仪器的快照功能(分配仪器的一部分)找出剩余的物体,以及它的物体图形仪器,找出你认为不再需要的物体仍然存在的东西。