内存警告后EXC_BAD_ACCESS

时间:2012-08-26 13:57:38

标签: iphone ios memory-management uiimage didreceivememorywarning

我收到内存警告后,我的应用程序出现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

1 个答案:

答案 0 :(得分:3)

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

然后在不存在的对象上调用

setImage,这将触发EXC_BAD_ACCESS