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

标签 objective-c cocoa garbage-collection nsoperation

在我的应用程序中一切正常,直到我分离线程以从文件中读取音频数据并处理它。

无论我做什么,垃圾收集似乎都不知道该线程上发生的情况。我尝试过[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/

相关文章:

objective-c - 如何检索 Cocoa API 的 Swift "header"文件?

objective-c - 自定义类 NSObject 不符合键值编码

php - 让 json_encode 不转义 html 实体

c# - 未为 XAML 页面调用析构函数

java - Shenandoah 垃圾收集器 - 重定向指针如何在应用程序更改对象状态之前收集两次的区域中工作?

objective-c - 类方法实例范围?

ios - 单击同一集合单元格中的按钮时如何获取集合单元格中的标签

macos - 在 Quartz 中使用 XOR 绘图

cocoa - 将 Cocoa 应用程序变成跨平台应用程序?

java - Android GC 考虑因素——GC 何时运行,是否可以从代码中跟踪其运行状态?