UIImage imageNamed第二次给出EXC_BAD_ACCESS

时间:2009-02-18 23:54:43

标签: cocoa-touch core-graphics

我正在开发一款带有迷你游戏的游戏。在一个游戏视图中,我有以下代码:

UIImage* img = [UIImage imageNamed:@"foo.png"];
someImage = CGImageRetain(img.CGImage);
[img release];

someImage的类型为CGImageRef,这在第一次没有问题。在用户输掉迷你游戏(或退出)后,游戏和所有内容似乎都得到了正确的解除。然后,如果他们回到迷你游戏中,并且游戏再次构建,则行:

someImage = CGImageRetain(img.CGImage);

导致某种错误......几乎就像我的UIImage对象已经被释放一样。我知道使用[UIImage imageNamed]有一些怪癖,但我根本无法追踪它。任何帮助将不胜感激:)

1 个答案:

答案 0 :(得分:11)

这一行是你的问题;

[img release];

在Cocoa中,一般惯例是如果一个函数返回一个对象并且不包含单词copy或alloc,那么你就不必释放它。

返回对象的函数通常会将它们添加到自动释放池中。如果您打算保留该对象,那么您应该保留(并在以后发布)它。如果没有,那么它将自动被释放。

如果您尝试释放其中一个对象,则会导致不良。在这种情况下,我怀疑它正在释放操作系统认为它仍然拥有的资源。

This thread包含有关Cocoa内存管理的更多详细信息。