A WeakReference represents a reference to an object that is not seen by the tracing phase of the garbage collector. This allows the referenced object to be garbage collected as if nothing is referring to it.
foo = Object.new ref = References::WeakReference.new(foo) ref.object # should be foo ObjectSpace.garbage_collect ref.object # should be nil
This is a pure ruby implementation of a weak reference. It is much more efficient than the bundled WeakRef implementation because it does not subclass Delegator which is very heavy to instantiate and utilizes a fair amount of memory under Ruby 1.8.
Create a weak reference to an object.
# File lib/ref/weak_reference.rb, line 16 def initialize(obj) raise NotImplementedError.new("This is an abstract class; you must require an implementation") end
Get the referenced object. If the object has been reclaimed by the garbage collector, then this will return nil.
# File lib/ref/weak_reference.rb, line 22 def object raise NotImplementedError.new("This is an abstract class; you must require an implementation") end