设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1448|回复: 4
打印 上一主题 下一主题

[已经解决] 如果变量=nil的话,是否就释放了?

 关闭 [复制链接]

Lv3.寻梦者

梦石
0
星屑
1195
在线时间
1564 小时
注册时间
2008-7-30
帖子
4418

贵宾

跳转到指定楼层
1
发表于 2009-12-29 23:50:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 DeathKing 于 2009-12-30 12:52 编辑

真是个小白问题{:nm_3:}

我就是想问一下,如果我之前有个非nil变量(也就是占用了一些内存),如果我让 var=nil 的话,是否是将这个变量释放?然后把变量所占用的内存也给释放了?

See FScript Here:https://github.com/DeathKing/fscript
潜心编写URG3中。
所有对URG3的疑问和勘误或者建议,请移步至发布页面。
欢迎萌妹纸催更

Lv3.寻梦者 (暗夜天使)

精灵族の天使

梦石
0
星屑
1697
在线时间
3038 小时
注册时间
2007-3-16
帖子
33731

开拓者贵宾

2
发表于 2009-12-30 00:50:09 | 只看该作者
变量的内存会通过自动回收系统自动释放,可以不用担心这个。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

彩色的银子

梦石
0
星屑
50
在线时间
190 小时
注册时间
2006-6-13
帖子
1361

贵宾

3
发表于 2009-12-30 02:55:13 | 只看该作者
如果一个变量失去了索引就会被GC回收....
= =但是

a = Sprite.new
b = a
a = nil
这个时候那个Sprite依然是存在的。。。。。
-.-
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
4
发表于 2009-12-30 04:03:47 | 只看该作者
准确地说,不是让变量释放了,而是让变量指向的对象释放了,所谓释放也就是把变量指向的对象所占用的内存释放了~ 变量 = nil 会让该变量重新指向 nil 这个 NilClass 的单一实例,这也是为了让某对象被垃圾回收时的普遍做法,其实完全也可以给变量赋一个其它任意值,这样之前仅仅被这个变量引用的对象就会在适当的时机被回收……另外借楼提一个以前测试时无意发现的诡异现象:

  1. class Sprite
  2.   alias initialize_old initialize
  3. #  def initialize(viewport = nil)
  4. #    initialize_old
  5. #  end
  6. end

  7. s = Sprite.new
  8. s.bitmap = RPG::Cache.battler("001-Fighter01", 0)
  9. s.z = 99999999
  10. s = nil
  11. GC.start
复制代码
直接运行一切正常,Sprite 被顺利回收;一旦把重定义 Sprite 的 initialize 那段注释取消后,Sprite 就一直没有被回收 =v= 后经测试发现问题只出现在 Sprite 这一个类型上,推测是在重定义后某处被某邪恶的东西引用到了……
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1195
在线时间
1564 小时
注册时间
2008-7-30
帖子
4418

贵宾

5
 楼主| 发表于 2009-12-30 12:52:57 | 只看该作者
明白了……
真是谢谢各位大大了{:nm_4:}。

See FScript Here:https://github.com/DeathKing/fscript
潜心编写URG3中。
所有对URG3的疑问和勘误或者建议,请移步至发布页面。
欢迎萌妹纸催更
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-24 20:26

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表