SKEmitterNode вызывает утечку памяти

Я программирую игру с помощью Xcode и тестирую ее на симуляторе iOS с помощью набора Sprite.

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