Project1
标题:
如果变量=nil的话,是否就释放了?
[打印本页]
作者:
DeathKing
时间:
2009-12-29 23:50
标题:
如果变量=nil的话,是否就释放了?
本帖最后由 DeathKing 于 2009-12-30 12:52 编辑
真是个小白问题{:nm_3:}
我就是想问一下,如果我之前有个非nil变量(也就是占用了一些内存),如果我让 var=nil 的话,是否是将这个变量释放?然后把变量所占用的内存也给释放了?
作者:
精灵使者
时间:
2009-12-30 00:50
变量的内存会通过自动回收系统自动释放,可以不用担心这个。
作者:
神思
时间:
2009-12-30 02:55
如果一个变量失去了索引就会被GC回收....
= =但是
a = Sprite.new
b = a
a = nil
这个时候那个Sprite依然是存在的。。。。。
作者:
紫苏
时间:
2009-12-30 04:03
准确地说,不是让变量释放了,而是让变量指向的对象释放了,所谓释放也就是把变量指向的对象所占用的内存释放了~ 变量 = nil 会让该变量重新指向 nil 这个 NilClass 的单一实例,这也是为了让某对象被垃圾回收时的普遍做法,其实完全也可以给变量赋一个其它任意值,这样之前仅仅被这个变量引用的对象就会在适当的时机被回收……另外借楼提一个以前测试时无意发现的诡异现象:
class Sprite
alias initialize_old initialize
# def initialize(viewport = nil)
# initialize_old
# end
end
s = Sprite.new
s.bitmap = RPG::Cache.battler("001-Fighter01", 0)
s.z = 99999999
s = nil
GC.start
复制代码
直接运行一切正常,Sprite 被顺利回收;一旦把重定义 Sprite 的 initialize 那段注释取消后,Sprite 就一直没有被回收 =v= 后经测试发现问题只出现在 Sprite 这一个类型上,推测是在重定义后某处被某邪恶的东西引用到了……
作者:
DeathKing
时间:
2009-12-30 12:52
明白了……
真是谢谢各位大大了{:nm_4:}。
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1