代码之家  ›  专栏  ›  技术社区  ›  Jonas

uiimage imagename第二次给exc_bad_访问权

  •  3
  • Jonas  · 技术社区  · 16 年前

    我正在做一个有很多小游戏的游戏。在一个游戏视图中,我有以下代码:

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

    有些图像是cgimageref类型,这是第一次没有问题。当用户丢失迷你游戏(或退出)后,游戏和所有东西似乎都得到了正确的释放。然后,如果他们回到迷你游戏中,游戏又重新构建起来,那么这条线:

    someImage = CGImageRetain(img.CGImage);
    

    导致某种类型的错误…就像我的uiimage对象已经被释放。我知道使用[uiimageimagename]有一些奇怪之处,但我根本无法追踪到。如有任何帮助,我们将不胜感激:)

    1 回复  |  直到 16 年前
        1
  •  11
  •   Community CDub    8 年前

    这是你的问题;

    [img release];
    

    在cocoa中,一般的约定是,如果一个函数返回一个对象,并且不包含copy或alloc这两个词,那么就不必释放它。

    返回对象的函数通常将它们添加到自动释放池中。如果您计划保留该对象,那么应该保留(稍后再释放)它。否则,它将自动释放。

    如果你试图释放这些物体中的一个,那么它将导致不良。在这种情况下,我怀疑它正在释放操作系统认为它仍然拥有的资源。

    This thread 包含关于cocoa下内存管理的更多详细信息。