非ARC库对象发送到ARC代码。 Overreleased?

时间:2013-10-10 19:52:24

标签: objective-c automatic-ref-counting

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

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

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

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

1 个答案:

答案 0 :(得分:0)

根据您的描述,autorelease按原样运行 - 该函数已自动释放该对象,这意味着您可以使用它,但随后它会在自动释放池的末尾发布。

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