gpt4 book ai didi

swift - SKTextureAtlas 留在内存中

转载 作者:行者123 更新时间:2023-11-30 11:06:17 25 4
gpt4 key购买 nike

我做了一个快速项目来了解 SpriteKit 如何从内存中释放 map 集。每次点击屏幕时,都会创建一个图集并将其加载到内存中。对图集的唯一引用是您在下面的代码中看到的内容,我认为由于 var 位于非转义函数内,因此它不具有强引用。我的目标是之前加载到内存中的 map 集最终被释放,但是内存会堆积并最终崩溃。

我知道 map 集只应该加载一次,苹果在这里提出的三点 ( Working with Sprites ) 关于为什么纹理不会被释放

有人可以帮我理解为什么会出现这种情况吗?

class GameScene: SKScene {

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

var atlas:SKTextureAtlas? = SKTextureAtlas(named: "Title")

atlas?.preload {

atlas = nil

print("Loaded")

}

}

}

enter image description here 每次检测到触摸时都会创建一个新的内存阶梯

最佳答案

每次触摸屏幕时,您都会分配并初始化一个新纹理,这意味着该函数第二次运行时您将没有引用,因为它会被新的纹理指针替换

要解决这个问题,请在 var 声明之前添加 static,这将防止变量在程序完成之前被新指针覆盖

例如如果你放入该函数

var nm = 5 
print(nm) // will print 5 every time

nm += 1
print(nm) // will print 6 every time

nm 每次都会被覆盖在声明之前放置 static静态变量 nm = 5将解决问题,您会看到每次函数运行时数字都会增加

关于swift - SKTextureAtlas 留在内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52682096/

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