Sha256: cfd37d0b672f85122e44a40c38c484e31f5d0d791a2c409d8e71d0bff4312ed7
Contents?: true
Size: 1.38 KB
Versions: 1
Compression:
Stored size: 1.38 KB
Contents
module RMExtensions module ObjectExtensions module Accessors # creates an +attr_accessor+ like behavior, but the objects are # stored with a WeakRef. # does not conform to KVO like attr_accessor does. def rmext_weak_attr_accessor(*attrs) attrs.each do |attr| define_method(attr) do instance_variable_get("@#{attr}") end define_method("#{attr}=") do |val| instance_variable_set("@#{attr}", WeakRef.new(val)) val end end end # creates an +attr_accessor+ like behavior, but the objects are # stored in an NSMapTable with strong keys (the attrs) and # weak values. If the value deallocates, it becomes nil, unlike # a traditional WeakRef. # does not conform to KVO like attr_accessor does. def rmext_zeroing_weak_attr_accessor(*attrs) attrs.each do |attr| define_method(attr) do if @__zeroing_weak_holders @__zeroing_weak_holders.objectForKey(attr) end end define_method("#{attr}=") do |val| @__zeroing_weak_holders ||= NSMapTable.strongToWeakObjectsMapTable @__zeroing_weak_holders.setObject(val, forKey:attr) val end end end end end end Object.send(:include, ::RMExtensions::ObjectExtensions::Accessors)
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
rm-extensions-0.5.0 | lib/motion/accessors.rb |