I have a class, MyObjectClass with a property, MyReport of type MyReportClass.
I have a Report class called, MyReportClass with a property, MyObject of type MyObjectClass.
MyObjectClass has a method called MakeReport:
[code] If MyReport = Nil then
MyReport = New MyReportClass(me)
This gives me a circular reference.
MyObjectClass is stored in the RowTag of a listbox.
If rows in the listbox never get removed for the life of the app, do I need to be concerned about the circular reference?
Assuming I do need to remove rows, I’ve been reading about using the Weak Property Pattern, but I don’t understand how this works. Could someone explain please?
Maybe you can also find of interest this entry in the Xojo Blog: http://blog.xojo.com/2016/04/20/weakref-and-memory-management/
Thanks guys. The wording of the first article I posted, tripped me up on typing the properties. Specifically, “The private property created by Xojo now changes type to WeakRef.” The private property needs to be changed manually and the original property stays as declared.
One suggestion that wasn’t in my original post: use computed properties to manage the WeakRefs for you.
- Create a computed property, MyParent As ParentClass
- Create a shadow property, mMyParentWR As WeakRef
- Use the MyParent getter and setter to translate to and from the WeakRef.
In this way, you can just reference MyParent without worrying about the accompanying processing. Just be prepared for MyParent to be nil.
if mMyParentWR is nil then
return ParentClass( mMyParentWR.Value )
if value is nil then
mMyParentWR = nil
mMyParentWR = new WeakRef( value )
That’s what Christian’s post does (that he referred to in the OP), but it contained an error and was thus misleading.
^This helped me a lot today, thanks all!