赞 | 2 |
VIP | 143 |
好人卡 | 1 |
积分 | 1 |
经验 | 216792 |
最后登录 | 2019-10-10 |
在线时间 | 24 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 61
- 在线时间
- 24 小时
- 注册时间
- 2008-8-5
- 帖子
- 1924
|
准确地说,不是让变量释放了,而是让变量指向的对象释放了,所谓释放也就是把变量指向的对象所占用的内存释放了~ 变量 = 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 这一个类型上,推测是在重定义后某处被某邪恶的东西引用到了…… |
|