使用Swift的SpriteKit中的iOS应用程序在6分钟后滞后,任何想法为什么?

时间:2015-01-07 02:20:39

标签: ios performance swift sprite-kit

我一直在使用SpriteKit中的应用程序,该应用程序在用户的每个手势后显示一个新图像。在每个会话期间,图像不可避免地removedFromParent(),但用户经常调用它们。

使用我的应用程序约6分钟后,我注意到它开始变得不稳定。我设置的手势使用滑动,但出于某种原因,当我点击屏幕时,CPU使用率高达104%?!

每次滑动后,我都会调用此代码:

    var chooseImage:String = imageCollection[Int(arc4random() % 16)]
    var swiperImage = SKSpriteNode(imageNamed: chooseImage)
    swiperImage.position = nodePosition
    swiperImage.xScale = SH * 0.002
    swiperImage.yScale = SH * 0.002
    addChild(swiperImage)    

这是我每次刷卡后调用的代码的一部分。这可能是内存泄漏吗?我完全失去了。

这是CPU使用率结果:

2 个答案:

答案 0 :(得分:2)

您应该尝试为这些图像存储String,而不是存储SKTexture的数组。当您引用代码的对象被实例化时,将创建这些纹理。然后,您可以使用这些纹理稍后实例化节点,从而减少每次创建节点时不必要的图像加载量。它看起来像是:

let imageTextures = imageCollection.map { SKTexture(imageNamed: $0) }
...
let swiperImage = SKSpriteNode(texture: imageTextures[Int(arc4random_uniform(imageTextures.count))]

此外,您可以使用arc4random_uniform()生成“均匀分布的小于upper_bound的随机数”,而不是使用mod。

此解决方案还有一个好处,即让多个节点使用相同的纹理,而无需为每个节点重新加载它。

答案 1 :(得分:0)

为什么在添加新的孩子之前不要清除父母的孩子。