1

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

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

最初我声明array为:

array = [[NSMutableArray alloc] init];

计时器运行良好,直到 10 秒,因为计时器在 10 秒后崩溃了 1/10 秒。

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

感谢进阶。

4

3 回答 3

0

你确定你应该发布 cgImage 吗?

我没有看到 UIGetScreenImage() 的文档,但如果它遵循Create Rule,我不希望您需要释放该对象(因为该函数的名称中没有“Create”或“Copy”)。

编辑:从那以后,我发现几个参考资料说你确实需要释放图像,尽管函数的名称。(显然已UICreateScreenImage()在 3.2 SDK 中重命名。

于 2010-04-13T12:08:34.377 回答
0

addObject: 如果对象为 nil,将引发异常。尝试这个:

array = [[NSMutableArray alloc] initWithCapacity:1]; //designated initializer
CGImageRef cgImage = UIGetScreenImage();
if(cgImage)
{
    [array addObject:cgImage];
    CGImageRelease(cgImage);
}
于 2010-04-13T12:04:07.710 回答
0

从 Apple 开发者论坛到 UIGetScreenImage():

当你使用这个函数时,请注意它会返回一个保留的 CGImageRef 并相应地管理你的内存。

于 2010-04-13T12:16:09.933 回答