Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory lua:如果图像创建为本地,内存还会使用吗?_Memory_Lua_Coronasdk - Fatal编程技术网

Memory lua:如果图像创建为本地,内存还会使用吗?

Memory lua:如果图像创建为本地,内存还会使用吗?,memory,lua,coronasdk,Memory,Lua,Coronasdk,正如我所知,在我们跳出函数后,局部变量不会使用内存,因为这种情况下图像仍然存在,它会使用内存吗 如果否,如果我将其插入到全局显示组中会怎么样?Lua是垃圾收集的。因此,在Lua收集到它之前,它仍然存在。由于再也没有人对该对象有引用,因此可以在函数存在后随时收集该对象 但是,事实上,没有任何对象的引用意味着您无论如何都不能使用它。您可以创建一个新对象,但它将是一个新对象,与以前不同。现在,由于Corona缓存图像,如果未收集原始图像,它可能会在内部引用同一图像。但是这样做是非常糟糕的 无论何时,只

正如我所知,在我们跳出函数后,局部变量不会使用内存,因为这种情况下图像仍然存在,它会使用内存吗


如果否,如果我将其插入到全局显示组中会怎么样?

Lua是垃圾收集的。因此,在Lua收集到它之前,它仍然存在。由于再也没有人对该对象有引用,因此可以在函数存在后随时收集该对象

但是,事实上,没有任何对象的引用意味着您无论如何都不能使用它。您可以创建一个新对象,但它将是一个新对象,与以前不同。现在,由于Corona缓存图像,如果未收集原始图像,它可能会在内部引用同一图像。但是这样做是非常糟糕的

无论何时,只要你在Lua中创建了一些东西,如果你想让它保持不变,那么你就需要让它保持不变。保留对它的引用

换一种说法。这:

local function myInit()
    local topBackGround = display.newImageRect("backGround.png", 500, 500)
    topBackGround.x = 0
    topBackGround.y = 0
end
返回一个值。独特的价值。任何声明为
local
的变量在其作用域结束后都将被丢弃(除非它们被函数捕获为闭包)


如果您的程序在任何时候都找不到值,因为对它的所有引用都被丢弃,那么该值将被消除。因此,如果你想使用某样东西,你需要把它放在一个你能找到它的地方。否则,Lua会知道你找不到它并将其删除。

我也听说过,任何没有指向的东西都会被收集,但我在函数中使用了local backGround=display.newImageRect,但图像一直保留着,有时我甚至会做collectgarbage(“收集”)。@FunFair:你怎么知道它仍然存在?你没有指向它的指针。
display.newImageRect("backGround.png", 500, 500)