如何摆脱SKTextures?

时间:2014-01-09 16:08:37

标签: sprite-kit sktextureatlas

也许这很容易,但我迷路了。

我有一个项目,我必须制作一个全屏动画,使用8个jpgs来模拟页面打开。所以我正在做的是:

  • 我有一个全屏显示的SKSpriteNode
  • 制作8个SKTextures数组
  • 使用SKTexture preloadTextures加载它们
  • 一旦加载,我就会使用animateWithTextures来显示动画
  • 稍后,另一个方法从场景中删除SKSpriteNode。

当我第一次翻页时,它会占用大量内存,但是当我在其上运行removeFromParent时,内存会继续使用。

我的.m文件在顶部声明:

SKSpriteNode *pageTurnNode;

因为我希望能够在两种方法中轻松引用它。

如何摆脱所有这些纹理等等?

2 个答案:

答案 0 :(得分:3)

纹理可能无法立即从内存中释放。 Apprantely Sprite Kit采用了缓存系统。它会在看起来合适时删除缓存的纹理。

那和@prototypical所说的。

答案 1 :(得分:2)

这似乎很有价值,我觉得这与这个问题有关。

  

由+ textureWithImageNamed分配的底层内存:可能或可能   切换到新的SKScene时不会(通常不会)发布。您   不能依靠那个。 iOS释放缓存的内存   + textureWithImageNamed:或+ imageNamed:当它看起来合适时,例如当它检测到内存不足的情况时。

     

如果您希望在完成后立即释放内存   纹理,你必须避免使用+ textureWithImageNamed:/ + imageNamed:。   创建SKTextures 的替代方法是:

     
      
  1. 使用+ imageWithContentsOfFile创建UIImages:
  2.   
  3. 通过调用SKTexture / + textureWithImage :( UIImage *)从生成的UIImage对象创建SKTextures。
  4.   

从这个答案中拉出来: iOS 7 Sprite Kit freeing up memory