2014-07-19 1 views
0

저는 Xcode의 스프라이트 키트를 사용하여 iPhone 용 게임을 프로그래밍하는 초심자입니다. SKEmitterNode에 문제가 있습니다. 특히 그것은 removeFromParent SKAction을 사용하는 경우에도 다음 SKEmitterNode가 추가 될 때마다 무제한 메모리 누수가있는 것처럼 보입니다. 누구나 해결책이 있습니까? 감사합니다SKEmitterNode에서 메모리 누출 문제를 해결하는 방법은 무엇입니까?

당신이 여기에 정의 된 정적 변수에에 강한 참조를 유지하고 있기 때문에 당신이 removeFromParent 액션을 호출 후 _EmitterShatterApart가 해제되지 않습니다
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]]]; 
    } 
} 

답변

1

:

SKEmitterNode *_EmitterShatterApart; 
+0

감사 reecon, 수 당신에 저를 조언 문제를 정확히 해결할 수있는 방법은 무엇입니까? _EmitterShatterApart를 다르게 정의해야합니까? – user3797886

+0

강력한 참조가 무엇인지 배우고 ARC (Automatic Reference Counting)가 어떻게 작동하는지에 대한 기본적인 이해를 얻으려면 시간이 걸릴 것입니다. 그것은 당신에게 시간과 두통을 지금과 나중에 저장할 것입니다. – prototypical

+0

확실히해야합니다. 이러한 문제는 때로는 발견하기가 어렵고 임의로 메모리 부족 현상이 발생할 수 있습니다. 그것은 배우는 데 많은 시간을 들이지 않을 것이고 그것은 꽤 쉽습니다. – RaffAl