在我的应用程序中一切正常,直到我分离线程以从文件中读取音频数据并处理它。
无论我做什么,垃圾收集似乎都不知道该线程上发生的情况。我尝试过[NSThread self]、[NSThread currentThread]、[[NSGarbageCollector defaultCollector]collectIfNeeded]和collectExhaustivly]。 我从 NSThread 切换到 NSOperation 和 NSOperationQueue。
这些建议的解决方案均无效。最近,我从 NSMutableArrays 切换到
Float32* pfArray= calloc(numFloats, sizeof(Float32));
保存我的数据,并使用
免费(pfArray);
释放该内存。这工作得更好,但仍然泄漏了相当多的量。
垃圾收集似乎在事件监视器中指示的“真实内存”达到某个任意数字后在某种程度上开始工作,但当它确实工作时,它不会释放所有正在使用的内存。它只是不让它远高于任意阈值。
我读到 GC 是可行的方法,但现在我不确定并且有一个几乎完全编写的程序。任何建议都会非常有帮助。谢谢!
最佳答案
垃圾收集确实适用于应用程序的所有线程。您可能无意中保留了对某个根对象的引用,从而泄漏了子图;然而,如果没有原始代码,就没什么可说的了。
关于objective-c - 为什么垃圾收集不适用于线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5060328/