gpt4 book ai didi

iOS 7 Sprite Kit 释放内存

转载 作者:IT王子 更新时间:2023-10-29 08:05:06 26 4
gpt4 key购买 nike

我正在构建一个针对新的 iOS 7 和 Sprite Kit 的 iOS 游戏,使用发射器节点和物理来增强游戏玩法。在开发应用程序时,我遇到了一个严重的问题:你创建了你的场景、节点、效果,但是当你完成并需要返回主屏幕时,你如何释放这些资源分配的所有内存?

理想情况下,ARC 应该释放所有内容,应用程序应该恢复到创建场景之前的内存消耗水平,但事实并非如此。

我添加了以下代码,作为 View 的 dealloc 方法,它绘制场景并负责在关闭(移除)时移除所有内容:

- (void) dealloc
{
if (scene != nil)
{
[scene setPaused:YES];

[scene removeAllActions];
[scene removeAllChildren];

scene = nil;

[((SKView *)sceneView) presentScene:nil];

sceneView = nil;
}
}
  • sceneView是一个UIView,是场景的容器
  • scene 是 SKScene 类的扩展,创建所有 SKSpriteNode 对象

对于此事,我将不胜感激。

最佳答案

我在使用 Sprite Kit 时遇到了很多内存问题,我使用了技术支持票来获取信息,它可能与此处有关。我在问是否开始一个新的 SKScene 会完全释放前一个使用的所有内存。我发现了这一点:

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

如果您希望在处理完纹理后立即释放内存,则必须避免使用 +textureWithImageNamed:/+imageNamed:。创建 SKTextures 的替代方法是:首先使用 +imageWithContentsOfFile: 创建 UIImages,然后通过调用 SKTexture/+textureWithImage:(UIImage*) 从生成的 UIImage 对象创建 SKTextures。

不知道对你有没有帮助。

关于iOS 7 Sprite Kit 释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19251337/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com