SKEmitterNode导致内存泄漏

时间:2014-07-02 15:25:25

标签: objective-c xcode memory-leaks sprite-kit skemitternode

我正在使用Xcode编写游戏并使用Sprite Kit在iOS模拟器上测试它。

我使用的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];
        }
}

1 个答案:

答案 0 :(得分:1)

在添加新发射器之前,您应该从场景中删除旧发射器。试试:

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

如果你不这样做,那么你继续在场景中添加发射器,因此占用内存而不释放它。