SKEmitterNode причинява изтичане на памет

Програмирам игра с помощта на Xcode и я тествам на iOS Simulator, използвайки Sprite Kit.

SKEmitterNode, който използвам, изглежда причинява изтичане на памет; когато играта работи, всеки път, когато SKEmitterNode се постави на екрана (при рисуване на „експлозия“), под „Показване на навигатора за отстраняване на грешки“ вляво, паметта се увеличава неограничено.

Някой има ли решение на този проблем?

Кодът по-долу е изцяло на MYScene.m.

Моят SKEmitterNode се нарича _EmitterShatterApart, което е експлозия, наречена „ShatterApart.sks“. _PositionObject е SKSpriteNode, който е обектът, който се разрушава. _bgLayer е фоновият слой.

@implementation MyScene
{
SKEmitterNode *_EmitterShatterApart;
...
}
-(void)MatchIncorrect
{
...
        _EmitterShatterApart = [NSKeyedUnarchiver unarchiveObjectWithFile: [[NSBundle mainBundle] pathForResource:@"ShatterApart" ofType:@"sks"]];
        _EmitterShatterApart.position = _PositionsObject.position;
        if (!_EmitterShatterApart.parent) {
            //[self.particleLayerNode addChild:_EmitterShatterApart];
            [_bgLayer addChild:_EmitterShatterApart];
            _EmitterShatterApart.userInteractionEnabled=FALSE;
            [_EmitterShatterApart resetSimulation];
        }
}

person user3797886    schedule 02.07.2014    source източник


Отговори (1)


Преди да добавите нов излъчвател, трябва да премахнете стария от сцената. Опитайте с:

-(void)MatchIncorrect
{
    ...
    [_EmitterShatterApart removeFromParent];
    _EmitterShatterApart = [NSKeyedUnarchiver unarchiveObjectWithFile: [[NSBundle mainBundle] pathForResource:@"ShatterApart" ofType:@"sks"]];
    ...

Ако не направите това, тогава продължавате да добавяте излъчватели към вашата сцена, като по този начин заемате паметта, без изобщо да я освобождавате.

person sergio    schedule 02.07.2014