【问题标题】:Memory management error, using cocos2d for iPhone内存管理错误,使用 cocos2d for iPhone
【发布时间】:2010-05-25 15:42:23
【问题描述】:

所以我在 cocos2d 中遇到了 EXC_BAD_ACCESS 错误。从到目前为止我一直在搜索的内容来看,它主要与尝试释放已经释放的对象有关。我以前遇到过这个错误,它的解决方案很简单,几乎是由释放一个释放的对象引起的。但是现在,使用 cocos2d(不确定这是否是他们框架中的错误),我在这一行得到了一个 EXC_BAD_ACCESS:

CCMenuItemSprite *btn = [CCMenuItemSprite itemFromNormalSprite:op selectedSprite:op target:self selector:NSSelectorFromString([sceneMethods objectAtIndex:i])];

基本上,我正在创建一个简单的菜单系统,以便于维护和更新。没什么太严重的。在这个特定的行中,我正在创建一个以 self 作为目标并使用选择器的 CCMenuItemSprite。我已经断言作为参数传递的选择器是正确的,并且还尝试对正常和选定的精灵使用不同的(尽管这不应该有任何区别)但仍然不行!错误在 cocos2d 框架中很深,正是当 CCMenuItem 被“激活”时,它调用了同一类的 NSInvoker 上的调用。并分析堆栈跟踪,它恰好在调用方法上崩溃,这导致人们相信它与 NSInvoker 有关。有人有类似的问题或对此问题有建议吗?提前致谢。

【问题讨论】:

    标签: iphone objective-c cocoa cocos2d-iphone exc-bad-access


    【解决方案1】:

    只是猜测:您完全确定 sceneMethods 中的所有对象都是真正的选择器吗?

    【讨论】:

    • 是的,他们是。好吧不是选择器,来自选择器的 NSStrings 但我已经断言: NSLog(@"%@", NSStringFromSelector(NSSelectorFromString([sceneMethods objectAtIndex:i])));
    • 是的,对不起,我的意思是选择器的字符串表示。这意味着op 一定很糟糕。
    • 好吧 op 是什么,基本上是一个 CCSprite*,但如果它很糟糕,它不会破坏它当前中断的程序,实际上如果它们是 nil,它应该抛出一个异常,并且它在内部保留这些精灵的参考。我真的一无所知,我已经打印了整个数组,但看起来还可以。堆栈跟踪将我带到内部 cocos2d 框架,这就是为什么我认为这是一个错误......
    猜你喜欢
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 2011-10-10
    相关资源
    最近更新 更多