查看: 1328|回复: 0

检测未释放的对象

[复制链接]

…あたしは天

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

开拓者贵宾

发表于 2014-8-2 20:07:15 | 显示全部楼层 |阅读模式

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

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

×
[pre lang="ruby" line="1"]
#--------------------------------------------------------------------------
# ● require Taroxd基础设置
#--------------------------------------------------------------------------

class Viewport
  def_before(:dispose) { @__dispose__ = true }
  def disposed?; @__dispose__; end
end

need_dispose = [Bitmap, Sprite, Window, Plane, Tilemap, Viewport]
callers = {}
callers.compare_by_identity
not_disposed = []

need_dispose.each do |klass|
  klass.class_eval do
    def_after(:initialize) {|*| callers[self] = caller }
  end
end

Scene_Base.class_eval do
  def_after :terminate do
    need_dispose.each do |klass|
      ObjectSpace.each_object(klass) do |obj|
        not_disposed.push(obj) unless obj.disposed?
      end
    end
  end

  def_after :update do
    return unless Input.trigger?(:ALT)
    puts not_disposed.delete_if(&:disposed?)
    puts callers[
      not_disposed.shuffle.find do |obj|
        callers[obj] && callers[obj].none? {|str| str.start_with?('{0004}') }
      end
    ]
  end
end
[/pre]

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

在本发帖返回顶部