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

Mar*_*ark 0 cocoa garbage-collection objective-c nsoperation

在我的应用程序中,每个东西都可以正常工作,直到我分离一个线程从文件中读取音频数据并进行处理.

无论我做什么,垃圾收集似乎都不知道这个线程上发生了什么.我试过[NSThread self],[NSThread currentThread],[[NSGarbageCollector defaultCollector] collectIfNeeded]和collectExhaustivly].我从NSThread转到NSOperation与NSOperationQueue.

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

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

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

在Activity Monitor中指示的"真实内存"遇到一些任意数字后,垃圾收集似乎开始工作到一定程度,但是当它确实起作用时,它并不释放所有正在使用的内存.它只是不会让它远高于任意阈值.

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

mil*_*omi 5

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

  • 死了; 收集器适用于线程应用程序.在大多数情况下,它比线程应用程序中的非GC代码更有效.没有更多的证据,很难说你做错了什么. (2认同)