NSMutableArray EXC_BAD_EXCESS SIGBUS

时间:2010-04-13 11:32:13

标签: iphone objective-c nsmutablearray cgimage

我有以下代码在一段时间后导致崩溃,因为我在计时器中设置了以下代码:

CGImageRef cgImage = UIGetScreenImage();
[array addObject:(id)cgImage];
CGImageRelease(cgImage);

我最初宣称array为:

array = [[NSMutableArray alloc] init];

定时器一直运行到10秒,因为计时器在10秒后崩溃时为1/10秒。

我认为应用程序崩溃是因为EXC_BAD_EXCESS但不知道如何解决。 有人可以帮忙解决问题吗?

感谢Adv。

3 个答案:

答案 0 :(得分:0)

如果对象为nil,

addObject:将引发异常。试试这个:

array = [[NSMutableArray alloc] initWithCapacity:1]; //designated initializer
CGImageRef cgImage = UIGetScreenImage();
if(cgImage)
{
    [array addObject:cgImage];
    CGImageRelease(cgImage);
}

答案 1 :(得分:0)

你确定你应该发布cgImage吗?

我没有看到UIGetScreenImage()的文档,但是如果它跟在Create Rule之后,我不希望你需要释放该对象(因为该函数没有“Create”或“Copy”在它的名字)。

编辑: 我发现有几个references表示你需要释放图像,尽管该函数的名称。 (显然已在3.2 SDK中重命名为UICreateScreenImage()

答案 2 :(得分:0)

从Apple Developer Forum到UIGetScreenImage():

  

使用此功能时请注意   它返回一个保留的CGImageRef   并相应地管理你的记忆。