【发布时间】:2014-07-24 08:09:24
【问题描述】:
好的,所以标题使这看起来很容易解决,但问题就在这里。这些对象仅通过下面的循环进行操作,并删除
[SKAction removeFromParent];
解决了问题,只有对象仍然存在,因为我可以看到内存消耗随着时间的推移而增加,这会降低帧速率并增加 CPU。
我不知道为什么这会导致内存访问异常。提前致谢。
for (int i=0;i<30; i++) {
SKSpriteNode *particle = [SKSpriteNode spriteNodeWithColor:[SKColor purpleColor] size:CGSizeMake(3, 3)];
particle.zPosition = 0;
particle.position = position; // passed in through method call
[self addChild:particle];
SKAction *move = [SKAction moveByX:ScalarRandomRange(-25, 25) y:ScalarRandomRange(-25, 25) duration:0.1];
SKAction *fadeOut = [SKAction fadeOutWithDuration:0.5];
[particle runAction:[SKAction sequence:@[move,fadeOut]] withKey:@"explosion"];
}
这是通话位置的屏幕截图- 出现问题的堆栈。
我在更新方法中添加了以下代码
-(void)update:(CFTimeInterval)currentTime {
/* Called before each frame is rendered */
NSMutableArray *killList = [[NSMutableArray alloc]init];
for (SKNode *node in [self children]) {
if ([node.name isEqualToString:@"particle"]) {
if (!([node actionForKey:@"explosion"])) {
[killList addObject:node];
}
}
}
for (SKNode *node in killList) {
[node removeFromParent];
}
}
它似乎已经修复了异常问题,但我仍然注意到内存略有上升,我需要在仪器中进行调查。
不过,这似乎是一种解决问题的骇人听闻的方法,因为我应该能够使用
[SKAction removeFromParent];
按照我的顺序。
【问题讨论】:
-
看起来这个问题可能与我遇到的问题有点不同。
-
有什么不同?
-
好的,所以您是说您收到 EXC_BAD_ACCESS 但具体是在何时何地?调用堆栈说什么?它真的指向 removeFromParent 吗?请注意,内存的增加可能是任何事情,您只能通过查看 Instrument 的活动对象列表来确定动作或 sprite 是否保留在内存中。
-
我添加了截图。
标签: ios objective-c sprite-kit