2

收到内存警告后,我的应用程序出现 EXC_BAD_ACCESS 问题。这就是我的测试方式:我编写了一个简单的应用程序,它只分配内存但不释放它。在我分配了大量内存后,只剩下大约 14 MB 的可用内存,我切换到我的主应用程序。我立即在 didReceiveMemoryWarning 中收到内存警告。片刻之后,我的应用程序在一个在 UIButton 中设置图像的函数中崩溃:

-(void)activateRecordButton
{
    UIImage *image = [UIImage imageNamed:@"audioRecordOn"];
    [recButton setImage:image forState:UIControlStateNormal];
}

我得到的错误是调用 setImage 的行上的 EXC_BAD_ACCESS(code=1, address=some_address)。如果我评论这些行,我的应用程序会在另一个为 UIButton 设置图像的函数中崩溃。

这是我的 didReceiveMemoryWarning:

- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

为什么会这样?这是因为没有更多的内存来加载图像还是因为当其他应用程序分配了大量内存时,recButton 以某种方式被释放了?

我在 Iphone 4 ios 5.1.1 上运行

4

1 回答 1

3

默认情况下,UIViewController 将在didReceiveMemoryWarning(如果可能)中释放其视图。如果您没有手动保留按钮,您的按钮也会被释放。

setImage然后在不存在的对象上调用,这将触发EXC_BAD_ACCESS.

于 2012-08-26T14:39:29.973 回答