我注意到GalaSoft.MvvmLight.CommandWpf.RelayCommand<T>
使用WeakAction<T>
。
这种设计考虑令我感到惊讶,我进行了进一步的研究。
浏览网页时,我遇到this blog post,这增强了我的怀疑,但没有回答我最初的问题“为什么?”
为什么GalaSoft故意使用WeakAction
而不是普通的Action
来允许函数收集垃圾?
谢谢。
答案 0 :(得分:3)
为什么GalaSoft故意使用
WeakAction
而不是普通的Action
来允许函数收集垃圾?
很可能是为了防止命令使动作的所有者保持活动状态,并导致MvvmLight
应用程序中的内存泄漏。
使用WeakAction<T>
,尽管命令可能不存在,但所有者仍然有资格进行垃圾回收,因为命令与操作的所有者之间没有强引用。
答案 1 :(得分:0)