我注意到GalaSoft.MvvmLight.CommandWpf.RelayCommand<T>
使用WeakAction<T>
.
这种设计考虑让我感到惊讶,我做了一些进一步的调查。
在浏览网页时,我遇到了this blog post这加强了我的怀疑,但没有回答我最初的问题“为什么?”
为什么 GalaSoft 会故意使用 WeakAction
而不是简单的 Action
允许函数收集垃圾吗?
谢谢。
最佳答案
Why would GalaSoft intentionally use
WeakAction
instead of plainAction
allow the functions to get Garbage Collected?
很可能是为了防止命令使操作的所有者保持事件状态并导致 MvvmLight
中的内存泄漏应用程序。
使用 WeakAction<T>
,尽管命令可能不符合垃圾回收的条件,但所有者仍然有资格进行垃圾回收,因为命令和操作的所有者之间没有强引用。
关于c# - 为什么MVVMLight的RelayCommand使用WeakAction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51049392/