1

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

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

当我的应用程序实际收到内存警告时,应用程序崩溃并[self cleanUp]在线显示 EXC_BAD_ACCESS(一种确实存在的方法)。这怎么可能发生?据我了解,框架调用了该didReceiveMemoryWarning方法,然后在它尝试执行之前释放了我的类[self cleanUp]。为什么会发生这种情况?我怎样才能防止这种情况?

4

3 回答 3

1

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

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

于 2011-02-17T15:59:56.223 回答
1

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

于 2011-02-23T05:58:53.900 回答
0

疯狂猜测:先调用[self cleanup],再调用super。如果有帮助,您还可以在 sim 中模拟内存警告。

于 2011-02-17T02:18:16.287 回答