我在这个初始化方法中有这个精灵
lineDrawer = [[LineDrawer alloc]initWithLineColor:ccc3(color.r, color.g, color.b)];
lineDrawer.position = ccp(0,0);
lineDrawer.anchorPoint = ccp(1,1);
[self addChild:lineDrawer];
[self addChild:head];
[lineDrawer release];
这里没有错吗?我可以释放它,因为addchild保留了该对象。 (自动释放也可以)
虽然当我发布时,我稍后会得到EXC_BAD_ACCESS(代码= 1)。我也尝试将版本移动到dealloc方法,但它给了我同样的错误。
引用lineDrawer的唯一对象是spriteobject(Player:CCSprite)它在中定义并且它没有getter所以它甚至不能被另一个对象访问,所以我不知道看看这怎么可能发生。什么时候可以调用lineDrawer当只有所有者引用它时它被解除分配?
它发生在CCLayer的draw方法中的CC_NODE_DRAW_SETUP()行上。
任何提示?我知道这些问题总是难以解决,因为缺少代码但是很难知道要向您展示什么代码。如果我知道我可以自己解决它。我也尝试在仪器中调试一些,但我不确定在哪里看。
更新下, 我尝试使用zombies启用调试
这对你说什么吗? 这是LineDrawer类。这是我稍微修改过的其他人的课程。
http://pastebin.com/7Uv4GULy
http://pastebin.com/08NHeVt9
我有一种感觉,它的某些方法是预定的还是什么......
答案 0 :(得分:1)
由于您将lineDrawer
对象添加到CCSprite
的子集合中,因此可以通过.children
中定义的CCNode
属性对其进行公开引用。
但是,您发布的代码中的任何内容都显示错误,但LineDrawer
继承自CCLayer
,我不认为CCLayer
曾被设计用作CCSprite
的孩子......它真的需要成为你玩家对象的孩子吗? (例如,它应该跟随你的播放器精灵移动和旋转吗?)通常,一个图层是你的活动CCScene
节点或另一个图层的子节点。
答案 1 :(得分:0)
当你using ARC时,大多数问题都不会再发生了。
很可能你过度释放了一个物体。它不一定需要是lineDrawer。也许它是lineDrawer类中的一个对象。
解决这个问题的最佳方法是在构建方案中启用NSZombieObjects并找出访问了哪个对象。