[controls] fix memory leak in CollectionView
#14329
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #10578
Context: https://github.com/Vroomer/MAUI-navigation-memory-leak.git
After testing the above sample, I found that adding a
CollectionView
to aPage
, makes it and the entire page live forever.Android & Windows:
MauiRecyclerView
andStructuredItemsViewHandler
respectively subscribed toItemsLayout.PropertyChanged
. This kept theCollectionView
alive -> all the way up to thePage
.Switched to using
WeakNotifyPropertyChangedProxy
solved the issue for these two platforms.iOS:
CollectionView
,UICollectionView
, and various helper classes that would live forever.I switched to using
WeakReference<T>
to break the circular references. This required several null checks, wherenull
references were not possible before.After these changes my tests pass, yay!