1

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

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

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

当我第一次翻页时,它使用了大量的内存,但是当我在它上面运行 removeFromParent 时,内存继续被使用。

我的 .m 文件在顶部声明了这一点:

SKSpriteNode *pageTurnNode;

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

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

4

2 回答 2

3

纹理可能不会立即从内存中释放。显然 Sprite Kit 采用了缓存系统。它会在认为合适时删除缓存的纹理。

那和@prototypical 所说的。

于 2014-01-09T20:56:22.047 回答
2

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

+textureWithImageNamed: 分配的底层内存在切换到新的 SKScene 时可能会或可能不会(通常不会)释放。你不能依赖它。iOS 在它认为合适时释放由 +textureWithImageNamed: 或 +imageNamed: 缓存的内存,例如当它检测到内存不足的情况时。

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

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

从这个答案中提取: iOS 7 Sprite Kit 释放内存

于 2014-02-13T20:55:37.237 回答