Project1

标题: 把变量同时变为两个对象的实例,其值不会消失? [打印本页]

作者: a554187203    时间: 2013-8-31 23:52
标题: 把变量同时变为两个对象的实例,其值不会消失?
  1. class A < Window_Base
  2.   def initialize(x,y,k,z)
  3.     super(x,y,k,z)
  4.   end
  5. end
  6. class B
  7. end
  8. a = A.new(25,25,25,25)
  9. a = B.new
复制代码
为什么新建成的窗口还在

作者: a554187203    时间: 2013-9-1 10:23
抱歉,主楼的点评没懂,只能连贴
下面是scene_title中的一句 ,原本的作用是显示标题的背景图片,我略作了修改
  1.     [url=home.php?mod=space&uid=114926]@sprite[/url] = Sprite.new
  2.     @sprite.bitmap = RPG::Cache.title($data_system.title_name)
  3.     @sprite = Window_Base.new(33,33,33,33)
  4.     @sprite.x = 55
  5.     @sprite.y = 55
  6.     @sprite.width = 60
  7.      Graphics.transition
  8.     loop do
  9.       Graphics.update
  10.     end
复制代码
为什么这里的图片没有消失?按理说 @sprite.bitmap的值此刻已经没有了啊

作者: myownroc    时间: 2013-9-1 11:04
没有通过dispose释放。
来自:66RPG Windows Phone 8 客户端
作者: a554187203    时间: 2013-9-1 11:17
myownroc 发表于 2013-9-1 11:04
没有通过dispose释放。
来自:66RPG Windows Phone 8 客户端

我在问1+1=?的加号的含义,你们却告诉了我?=2
我只是想要知道,为什么这里的值消失了,而东西却还在存在
释放了当然就不存在了
可是为什么不释放就存在呢...
作者: myownroc    时间: 2013-9-1 11:29
本帖最后由 myownroc 于 2013-9-1 11:37 编辑
a554187203 发表于 2013-09-01 11:17

我在问1 1=?的加号的含义,你们却告诉了我?=2
我只是想要知道,为什么这里的值消失了,而东西却还在存在
释放了当然就不存在了
可是为什么不释放就存在呢...


前面的部分不像在说我吧。。。
生成实例的时候会占用内存,没有dispose内存就不会释放,那么这个实例就会继续存在。当这个另一种对象赋值给这个实例时,会占用更多的内存,这样就有可能两种东西都出现,不会使前一个"不存在"。也就是说,建立一个实例之后,必须在某个情况下释放该实例:比如点叉关闭game.exe就是强制释放game.exe的内存。

我不知道我这么说是不是对的。。。
来自:66RPG Windows Phone 8 客户端
作者: a554187203    时间: 2013-9-1 11:34
myownroc 发表于 2013-9-1 11:29
我知道前面的部分不像在说我
生成实例的时候会占用内存,没有dispose内存就不会释放,那么这个实例就会继 ...

嗯哪,对象真是奇怪...

作者: 无脑之人    时间: 2013-9-1 12:38
Sprite,Window等等一些内建类是用C++部分占用内存的,只通过Ruby无法彻底释放,必须用dispose方法
不过我记得一分钟之后GC就把他回收了?你可以用GC.start试试看还在不在
作者: satgo1546    时间: 2013-9-1 13:24
a = Window_Base.new(0, 0, 100, 100)
a = nil # 把a之前的值覆盖了,原来的a被nil冲走了……
# 但之前的Window还在,只是被冲走了,也没有变量指向那个Window,所以回不来啦~




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1