iphone - 内存警告后 EXC_BAD_ACCESS

标签 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 上运行

最佳答案

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

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

关于iphone - 内存警告后 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12130710/

相关文章:

iphone - 如何在我的 iPhone 上运行的应用程序中浏览核心数据?

objective-c - 如何将图例添加到核心图的散点图

windows - 帮助我了解 Process Explorer 中的这些内存统计信息

Java - 用于 native /非 native 例程的自定义分配器接口(interface)

ios - ViewController 没有取消

iphone - 解码字符串时获取垃圾和特殊字符

iphone - 如何使用 Xcode 4.0.2 调试 iOS 5 设备上的崩溃?

ios - 如何在不上传到 Appstore 的情况下检查 iOS 中的应用切片功能

ios - iAd 在 iAd 的顶部和底部留下空白

ios - 用户按下主页按钮后,应用程序未进入应用程序 didfinishlaunchingwith 选项