Tip of the day: Weak Property pattern
Other use is if you have two windows where one window needs to reference other, but one of the windows should be able to get away without leaving a reference to a dead window. Sometimes we have trouble as a window was closed already, but we have a reference to it. Accessing it causes an exception as controls are dead already.
So how to make a weak property?
First you create the normal property, e.g. test as window. Next you select it to convert it to computed property. The private property created by Xojo now changes type to WeakRef. The setter changes to this:
Sub Set()
if value = nil then
mTest = nil
else
mTest = new WeakRef(value)
end if
End
As you see we now create a weak Reference for the given value. If value is nil, we don't need the weak reference, so we set to nil.
For the getter, we simply take the value from WeakRef the value and return it. We use a variant for easy casting:
Sub Get()
if mTest <>Nil then
dim v as Variant = mTest.Value
return v
end if
End
The property can now be used like other properties. You don't really notice it is using a weak reference. Just you have to prepare for the case the property is suddenly nil.
