假设我想创建一个附加属性,将对象引用列表附加到视图实例(DependencyObject / FrameworkElement)...
什么时候发布所有这些引用?如果它们实现了,它会调用附加属性值的Dispose吗?
答案 0 :(得分:2)
或许更容易认为“引用”实际上从未被“释放”。它们只是通过跟随全局空间或任何线程堆栈的任何引用链而无法再被发现。然后它们被认为是垃圾,在某些时候收集器会来收集它们占用的内存。如果他们有终结者,它将不会立即收集内存,而是将对象放在将首先调用终结者的队列中。
FrameworkElement
不应,出于各种原因,请在卸载时在其值字典中保留的任何引用上调用Dispose
。初衷是因为它无法知道它对此负责。
想象一下这样一种场景,其中代码在别处创建了一个可处理对象,并将其附加到框架元素。如果该代码后来尝试使用该对象只是为了发现框架元素已经将其自身处理掉它会发生什么呢?
代码负责创建一次性对象,以确保将其放置在适当的位置。
答案 1 :(得分:0)
将依赖项属性视为DependencyObjects中的键值对。为附加的依赖项属性(或常规依赖项属性)分配值时,此值将放入字典中。这意味着当视图本身被垃圾收集时,垃圾收集器将收集列表中的项目。处置行为也很常见。