lua: 如果将图像创建为本地变量,存储器仍然会被使用吗?

local function myInit()
    local topBackGround = display.newImageRect("backGround.png", 500, 500)
    topBackGround.x = 0
    topBackGround.y = 0
end

据我所知,局部变量在函数执行完后不会占用内存,但是在本例中图像仍然存在,会占用内存吗?

如果不会,如果我将其插入到全局 displayGroup 中会怎样呢?

原文链接 https://stackoverflow.com/questions/7184447

点赞
stackoverflow用户734069
stackoverflow用户734069

Lua是垃圾收集的。因此,它将一直存在,直到Lua收集它为止。由于没有任何对象对它进行引用,函数执行后随时可以进行收集。

然而,没有任何对象对它进行引用意味着你无法使用它。你可以创建一个新的对象,但它将是一个_新的_对象,而不是之前的那个对象。由于Corona缓存图像,如果原始图像没有被收集,它可能在内部引用相同的图像。但这种做法是_极其_不好的。

任何时候,在Lua中创建任何东西,如果你想让它一直存在,那么你需要确实将它保留下来。保持一个对它的引用。

换句话说,这个:

display.newImageRect("backGround.png", 500, 500)

返回一个值。一个_唯一_的值。任何声明为 local 的变量在它们的作用域结束后都会被丢弃(除非它们被作为闭包被函数捕获)。

如果你的程序在任何时候无法找到一个值,因为所有对它的引用都已经丢弃,那么这个值将被删除。因此,如果你想使用某些东西,你需要将它保持在一个可以获取到的地方。否则,Lua知道你找不到它,并且会将其删除。

2011-08-25 03:03:39