我已经运行仪器,看看为什么我的SKScene不会取消分配和获得“泄漏”没有任何意义。 其中的“泄漏”的是,妥善解除分配和指向这样的情景:
border.path = path;
为造成泄漏,但第二天行是行:
CGPathRelease(path);
border.lineWidth = 1.0f;
border.strokeColor = [SKColor yellowColor];
[border setAlpha:0.0f];
[border runAction:[SKAction fadeAlphaTo:1.0f duration:0.2f]];
[self addChild:border];
所以,你可以清楚地看到它的released.I我也越来越“泄漏”的类似的方法:
-(void)explosionShake{
//[self testTargets];
NSArray *objectArray = [self children];
for (SKNode *node in objectArray) {
[node runAction:[SKAction moveBy:CGVectorMake(0.0f, 10.0f) duration:.05] completion:^{
[node runAction:[SKAction moveBy:CGVectorMake(0.0f, -15.0f) duration:.05] completion:^{
[node runAction:[SKAction moveBy:CGVectorMake(0.0f, 5.0f) duration:.05]];
}];
}];
}
}
之后现场结束,也是另一个对象,我要从它的父。
难道这些“泄密”,试图运行已被删除,从它的父节点上的动作引起的? 因为作为“explosionshake”正在运行时,从它的父在另一种方法中的一个节点可以被去除。 这个怎么样的方法:
SKEmitterNode *testForExplosion = [NSKeyedUnarchiver unarchiveObjectWithFile:[[NSBundle mainBundle] pathForResource:@"explosionTest" ofType:@"sks"]];
//testForExplosion.position = location;
//[testForExplosion setParticleSpeed:self.frame.size.width/self.gameSpeed];
SKNode *node = [SKNode node];
[self addChild:node];
[node setPosition:location];
[node runAction:[SKAction moveBy:CGVectorMake(-self.frame.size.width, 0) duration:self.gameSpeed]];
[node addChild:testForExplosion];
SKAction *wait = [SKAction waitForDuration:4.0f];
SKAction *remove = [SKAction removeFromParent];
NSArray *array = [NSArray arrayWithObjects:wait,remove, nil];
SKAction *sequence = [SKAction sequence:array];
该方法中的第一行中的红色,最后一个突出显示为绿色(这只是一个方法的块)。 我很困惑,为什么这些“泄漏”,但它可能有助于为什么我的场景是没有得到释放。
如果有人可以给我指点,为什么这些方法可能被导致内存泄漏,那将是非常,非常有帮助。 我有很多更多的方法,其理应泄漏SKCSprite
年代,当我的代码中明确提出removeFromParent