対象: クラスの終了処理(ファイナライザ)ファイナライザを用いることによって、C++のデストラクタのようにクラスの終了処理を書くことができる。 ObjectSpace.define_finalizerメソッドでファイナライザを登録することができる。クラスではinitializeメソッドの中でこの処理を行う。 class FinalizerTest def finalize proc { print "finalize called\n" } end def wait print "wait 5 seconds ...\n" sleep 5 print "done\n" end def initialize print "initialize called\n" ObjectSpace.define_finalizer(self, finalize) end end ft = FinalizerTest.new ft.wait これを実行するとFinalizerTestクラスのinitializeメソッドが呼ばれ、waitメソッドで5秒スリープした後、このオブジェクトがGCされるときにinitializeメソッドで登録したファイナライザが呼ばれている。 initialize called wait 5 seconds ... done finalize called (2010/03/29)
Copyright(C) 2004-2014 モバイル開発系(K) All rights reserved.
[Home]
|