Project1

标题: 检测未释放的对象 [打印本页]

作者: taroxd    时间: 2014-8-2 20:07
标题: 检测未释放的对象
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2. # ● require Taroxd基础设置
  3. #--------------------------------------------------------------------------
  4.  
  5. class Viewport
  6.   def_before(:dispose) { @__dispose__ = true }
  7.   def disposed?; @__dispose__; end
  8. end
  9.  
  10. need_dispose = [Bitmap, Sprite, Window, Plane, Tilemap, Viewport]
  11. callers = {}
  12. callers.compare_by_identity
  13. not_disposed = []
  14.  
  15. need_dispose.each do |klass|
  16.   klass.class_eval do
  17.     def_after(:initialize) {|*| callers[self] = caller }
  18.   end
  19. end
  20.  
  21. Scene_Base.class_eval do
  22.   def_after :terminate do
  23.     need_dispose.each do |klass|
  24.       ObjectSpace.each_object(klass) do |obj|
  25.         not_disposed.push(obj) unless obj.disposed?
  26.       end
  27.     end
  28.   end
  29.  
  30.   def_after :update do
  31.     return unless Input.trigger?(:ALT)
  32.     puts not_disposed.delete_if(&:disposed?)
  33.     puts callers[
  34.       not_disposed.shuffle.find do |obj|
  35.         callers[obj] && callers[obj].none? {|str| str.start_with?('{0004}') }
  36.       end
  37.     ]
  38.   end
  39. end





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