我有一些按钮、文本字段和方法的视图。当我加载视图,切换到另一个视图,然后切换回来时,我的应用程序崩溃了。我NSLog
在每个方法中添加了一个,以查看崩溃前的最后一个方法调用是什么,它是-(void)dealloc{
我想知道为什么调用此方法?每次重新加载视图时都会调用它吗?我已经仔细检查了我的代码,我绝对不会在任何地方调用它。
编辑:发现我的问题,我正在发布一个用于存储视图的数组。感谢@Darren,我找到了我的问题。
我有一些按钮、文本字段和方法的视图。当我加载视图,切换到另一个视图,然后切换回来时,我的应用程序崩溃了。我NSLog
在每个方法中添加了一个,以查看崩溃前的最后一个方法调用是什么,它是-(void)dealloc{
我想知道为什么调用此方法?每次重新加载视图时都会调用它吗?我已经仔细检查了我的代码,我绝对不会在任何地方调用它。
编辑:发现我的问题,我正在发布一个用于存储视图的数组。感谢@Darren,我找到了我的问题。
当不再需要某个类并将其从内存中删除时,将调用 Dealloc。当您没有更多指针指向视图中的任何内容时,它就会被释放。
你如何切换到/从视图?
如果你设置了一个指向视图的(强)指针,那么它不会被自动释放。
-dealloc
每当对象的引用计数降至 0 时都会调用它。要找出您的问题,请找出-dealloc
调用了什么对象。调用堆栈上的第二种方法是什么?第三?首先被-dealloc
发送到一个有效的对象指针?
有几种方法可以处理这种事情。一个好的第一步是打开 NSZombies(谷歌)。dealloc
如果您正在向无效对象发送消息(例如,),这会让您知道。通常,这会导致崩溃,但使用 NSZombies 你会得到一个很好的错误消息。