我在调试一个以可重现的方式崩溃的 iPhone 应用程序时遇到了麻烦。
短篇小说:
一个自定义UIViewController
被分配并推送到一个UINavigationController
's 堆栈上。一段时间后,UIViewController
从堆栈中弹出。下一次将 a 压入UIViewController
堆栈会使应用程序崩溃。
任何崩溃的标准程序是使用NSZombie
启用的仪器。在检查对象的历史后,发现一些我无法理解的内容:
- 对象接收 2(两)
autorelease
条消息,并且 NSAutoreleasePool
's drain 方法发送 3(三)条释放消息
到目前为止,防止崩溃的唯一方法是不向相关对象发送 1(一个)释放消息,从而引发内存泄漏的危险信号,只是它不会泄漏。
还有其他我忽略的解决方案吗?
更新:正如你们中的一个人指出的那样:
你的代码有问题。与自动释放池排水无关。
事实证明,第一个UIViewController
是作为委托传递给的,因此当调用来自导航控制器本身UINavigationController
时,我感到很困惑。Zombie
下次在问错问题之前我应该更加小心。