我最近發佈了一個問題here關於我遇到的一些內存問題。現在我已經修好了,這要歸功於這個美妙的社區,但我面臨着另一個問題。我使用Cocos2d開發遊戲,我試圖從數組中刪除一個Sprite。當我嘗試釋放我用來跟蹤要移除的精靈的臨時數組時,問題就出現了。已發佈數組EXC_ACCESS_ERROR和Cocos2D
NSMutableArray *spritesToRemove = [[NSMutableArray alloc] init];
// Loop through all sprites
for(CSSprite *sprite in _sprites){
if(sprite.toRemove){
[spritesToRemove addObject: sprite];
}
}
// loop through sprites to be removed
for(CSSprite *removeableSprite in spritesToRemove){
[_sprites removeObject: removeableSprite];
// Cocos2d code to remove a sprite
[self removeChild: removeableSprite cleanup: YES];
}
[spritesToRemove release]; // EXC_BAD_ACCESS error
我得到一種感覺,我得到了錯誤的原因是因爲我釋放精靈對象[self removeChild: removeableSprite cleanup: YES];
實際上釋放前陣。如果我刪除[spritesToRemove release]
這行,但是我顯然會在我手上發生內存泄漏,這一切都可以正常工作。
我試着走動去除精靈的,我可以得到通過完全省略線[self removeChild: removeableSprite cleanup: YES];
排序記憶的事情,但隨後的Cocos2D從CCNode內以-(void) visit
感謝[child visit];
再次拋出同樣的錯誤EXC_BAD_ACCESS您的幫助:-)
編輯:我啓用NSZombie,我得到這個消息:
*** -[Sprite release]: message sent to deallocated instance 0xfa94cf0
對於我來說,這對我來說意味着我最初的想法,陣列中的某個條目即將發佈。這是正確的嗎?無論如何,如果有,我可以找出哪裏?
就我所見,這一切看起來都很好。只有我能看到的是,如果你的精靈中的一個「刪除」在你進入本節之前將自己從清除中移除了FromFromParent,那麼如果孩子已經被刪除,Coco的removeChild方法將默默無聞。 – YvesLeBorg 2012-02-20 03:38:08
@YvesLeBorg他們怎麼能做到這一點?我有另一個保持數組中的精靈屬性的類,可以將它解除分配嗎? – Peter 2012-02-20 03:53:26
不確定,我沒有看到你所有的代碼。你的_sprites數組在這部分代碼中似乎與[self children]數組不同步。在那裏的某處,你可能有一個過程,從這個過程中刪除孩子,而不會將好消息告訴_sprites數組。 – YvesLeBorg 2012-02-20 04:08:54