Как исправить утечку памяти из SKEmitterNode?

Я новичок в программировании игры для iPhone с помощью набора спрайтов Xcode. У меня проблема с SKEmitterNode. В частности, похоже, что у меня происходит неограниченная утечка памяти каждый раз, когда добавляется следующий SKEmitterNode, даже если я использую SKAction removeFromParent. У кого-нибудь есть решение? Спасибо

SKEmitterNode *_EmitterShatterApart; 
...
-(void)ShatterApart
    {
    SKAction *fadeaway = [SKAction fadeOutWithDuration:0.5];
    SKAction *removeFromParent = [SKAction removeFromParent];
    _EmitterShatterApart = [NSKeyedUnarchiver unarchiveObjectWithFile: [[NSBundle mainBundle] pathForResource:@"ShatterApart" ofType:@"sks"]];
    _EmitterShatterApart.position = _NodePlayer.position;    
    if (!_EmitterShatterApart.parent) {
        [_bgLayer addChild:_EmitterShatterApart];
        _EmitterShatterApart.userInteractionEnabled=FALSE;
        [_EmitterShatterApart runAction: [SKAction sequence:@[fadeaway,removeFromParent]]];
    }
}

person user3797886    schedule 19.07.2014    source источник


Ответы (1)


_EmitterShatterApart не будет освобожден после вызова действия removeFromParent, потому что вы сохраняете сильную ссылку на него в статической переменной, которую вы определили здесь:

SKEmitterNode *_EmitterShatterApart; 
person Rafa de King    schedule 19.07.2014
comment
Спасибо reecon, не могли бы вы посоветовать мне, как именно я могу решить проблему? Должен ли я определять _EmitterShatterApart по-другому? - person user3797886; 20.07.2014
comment
Было бы неплохо потратить некоторое время, чтобы узнать, что такое сильная ссылка, и получить общее представление о том, как работает ARC (автоматический подсчет ссылок). Это сэкономит вам время и избавит от головной боли сейчас и позже. - person prototypical; 21.07.2014
comment
Определенно вы должны это сделать. Такие проблемы иногда трудно обнаружить, и они могут вызывать случайные сбои из-за нехватки памяти. Это не займет много времени, чтобы узнать, и это довольно легко. - person Rafa de King; 21.07.2014