0

我正在使用的一个非 ARC 预编译静态库正在我的主线程上发送我的 ARC 应用程序“事件”NSObjects,它已放置在主线程的自动释放池中。我的应用程序作用于处理函数中的事件对象,但不会保留或释放它,也不会再次使用它。

使用 Zombies 时,当主事件循环耗尽顶级自动释放池并且其中一个事件 NSObject 正在被释放时,我偶尔会休息一下。闻起来好像 ARC 已经释放了事件对象(也许当它超出我的处理程序的范围时),然后主事件循环再次释放它。

这是一个合理的理论,还是这是不可能的,我还有另一个错误?

如果可能的话,我可以在我的应用程序中做些什么来防止这种情况发生?

4

1 回答 1

0

根据您的描述,自动释放按应有的方式工作-该函数已自动释放该对象,这意味着您可以使用它,但随后它会在自动释放池的末尾被释放。

默认情况下,您在主循环中使用自动释放池。但是,没有什么能阻止您将调用包装到@autorelease块中并检查对象是否在正确的时间释放。

于 2013-10-10T20:23:24.143 回答