EXC_BAD_ACCESS
我遇到cocos2d-iphone 1.0.1
个问题。
我启用了NSZombies
,希望在我的代码中看到我访问的对象不应该访问。
问题出现在CCMenu.m
,此处:
-(void) ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event
{
NSAssert(state_ == kCCMenuStateTrackingTouch, @"[Menu ccTouchMoved] -- invalid state");
CCMenuItem *currentItem = [self itemForTouch:touch];
if (currentItem != selectedItem_) {
[selectedItem_ unselected]; // <--- selectedItem_ is a zombie
selectedItem_ = currentItem;
[selectedItem_ selected];
}
}
我可以观察到selectedItem_
是一个僵尸。
这是CCMenu
代码,而不是我的代码 - 我应该查看自己的代码。所以我看一下回溯:
这对我没有帮助:回溯没有达到我自己的代码。这是cocos2d-iphone
代码。
我该怎么做才能解决这个错误?
答案 0 :(得分:-1)
欧米茄,你应该小心所有权:
if (currentItem != selectedItem_)
selectedItem_ = currentItem; // is plain wrong on non ARC mode.
您应该为selectedItem _
合成保留的setter@property(nonatomic, retain) CCMenuItem* selectedItem;
...
@synthesize selectedItem;
然后使用setter assignement。不是普通的指针赋值。
self.selectedItem_ = currentItem;
// is actually kind of
// [selectedItem_ autorelease]
// selectedItem_ = [currentItem retain]