【问题标题】:UIImage imageNamed giving EXC_BAD_ACCESS the second timeUIImage imageNamed 第二次给出 EXC_BAD_ACCESS
【发布时间】:2010-10-08 11:35:33
【问题描述】:

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

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

someImage 是 CGImageRef 类型,第一次没有问题。在用户失去迷你游戏(或退出)后,游戏和一切似乎都被正确地释放了。然后,如果他们回到迷你游戏中,并且游戏再次构建,则行:

someImage = CGImageRetain(img.CGImage);

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

【问题讨论】:

    标签: cocoa-touch core-graphics


    【解决方案1】:

    这一行是你的问题;

    [img release];
    

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

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

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

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

    【讨论】:

    • 这似乎可以做到...谢谢 :) 有一天,我将掌握需要跟踪哪些对象的窍门。 :)
    猜你喜欢
    • 1970-01-01
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多