【问题标题】:lua : will memory still using if the image create as local?lua:如果图像创建为本地,内存是否仍会使用?
【发布时间】:2011-11-03 07:24:48
【问题描述】:
local function myInit()
    local topBackGround = display.newImageRect("backGround.png", 500, 500)
    topBackGround.x = 0
    topBackGround.y = 0
end

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

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

【问题讨论】:

    标签: memory lua coronasdk


    【解决方案1】:

    Lua 被垃圾回收。所以它仍然存在,直到 Lua 收集它。由于没有人再引用该对象,因此可以在函数存在后随时收集它。

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

    任何时候你在 Lua 中创建一些东西,如果你想保留它,那么你需要真正保留它。保留对它的引用。

    换一种说法。这个:

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

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

    如果您的程序在任何时候都找不到值,因为对它的所有引用都被丢弃了,那么该值将被消除。因此,如果您希望能够使用某些东西,则需要将其保存在可以拿到的地方。否则,Lua 知道你找不到它并会删除它。

    【讨论】:

    • 这也是我听到的,任何没有任何指向的东西都会被收集,但我在一个函数中做了一个本地背景 = display.newImageRect 但图像一直保留,我什至收集垃圾( “收集”)有时。
    • @FunFair:你怎么知道它还在?你没有指向它的指针。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-27
    • 2013-06-27
    • 1970-01-01
    相关资源
    最近更新 更多