如何在UIViewController的didReceiveMemoryWarning中获得EXC_BAD_ACCESS?

时间:2011-02-17 02:01:46

标签: ios exc-bad-access didreceivememorywarning

我正在UIViewController的子类中实现didReceiveMemoryWarning。我的代码如下所示:

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    [self cleanUp];
}

当我的应用程序实际收到内存警告时,应用程序在[self cleanUp]行(确实存在的方法)上发生了EXC_BAD_ACCESS崩溃。怎么会发生这种情况?据我所知,该框架称为didReceiveMemoryWarning方法,然后在尝试执行[self cleanUp]之前释放了我的类。为什么会这样?我该如何防止这种情况?

3 个答案:

答案 0 :(得分:1)

你在视图控制器中做了什么异常的事吗?崩溃发生时self的价值是多少?它是在调试(优化关闭)和发布版本中发生的吗?

尝试使用NSZombieEnabled运行。如果这是保持/释放不平衡的问题,那么应该可以帮助您找到它。

答案 1 :(得分:1)

崩溃实际上发生在-(void)cleanUp方法中,尽管Xcode指向名为 [self cleanUp]的行。在-(void)cleanUp内部,代码访问了已经发布的数组中的元素,因此访问了EXC_BAD_ACCESS。感谢大家的有用建议。

答案 2 :(得分:0)

狂野猜测:首先调用[self cleanup],然后调用super。 如果有帮助,您还可以在SIM卡中模拟内存警告。