查看: 1753|回复: 2

[已经解决] 局部变量与dispose与GC问题

[复制链接]
梦石
0
星屑
65
在线时间
389 小时
注册时间
2009-11-24
回帖
59
发表于 2014-10-19 20:09:36 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 test 于 2014-10-19 20:14 编辑

[pre lang='ruby' line='1']
def x()
        b = Bitmap.new(1, 1)
        $b = b
end
x()
#到了函数外面,此时b对应的位图对象还存在吗?

GC.start
msgbox($b)
# => #<Bitmap:0xXXXXXXX>

$b.dispose
GC.start
msgbox($b)
#释放了依然存在? => #<Bitmap:0xXXXXXXX>

$b = nil
GC.start
#这时怎么知道那个位图被回收了没有?
[/pre]

于是问题就来了:
1. 精灵dispose之后,精灵的bitmap属性对应的bitmap还存在吗?
2. 有必要在x函数最后加 b.dispose 吗?
3. 既然释放了GC却没有回收,那么位图和精灵的dispose方法究竟有什么用?
4. 怎么知道断开引用之后,对象是否被回收?

点评

不过也确实可以编程让GC对象的动作和他本身的dispose调用关联起来  发表于 2014-10-19 22:50

评分

参与人数 1星屑 +60 收起 理由
晴兰 + 60 会泄露

查看全部评分

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2014-10-19 20:21:21 | 显示全部楼层
1. 还存在
2. 没有必要。引用还在。
3. 释放内存。因为当Ruby的GC遇到了精灵时,你的游戏就有可能崩溃。所以在彻底解除引用之前要主动 dispose。
4. 理论上说,你不需要考虑这个。想考虑的话,参见 Ruby 文档中 ObjectSpace.define_finalizer 方法吧

点评

不会  发表于 2014-10-19 20:45
如果精灵dispose之后,精灵的bitmap属性对应的bitmap还存在,那Sprite在dispose的时候,会连Sprite.bitmap一起dispose吗?  发表于 2014-10-19 20:36

评分

参与人数 2星屑 +15 梦石 +1 收起 理由
test + 15 这样子看来要写很多dispose才行了…….
VIPArcher + 1 我很赞同

查看全部评分

回复

使用道具 举报

头像被屏蔽
梦石
0
星屑
653
在线时间
3774 小时
注册时间
2011-2-26
回帖
1577

开拓者

发表于 2014-10-19 21:15:15 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部