观察者模式可以使用弱引用的方法实现自动注销,但是存中风险。
Source ->OnNext ->Observer4WeakedObject->[OnNext -> CheckTarget -> weakreference]-> WarpObserver:IOnNext -> Observer
这种模式中将Observer函数注册到一个WrapObserver的OnNext委托中。
通过返回的IDispose持有WrapObserver引用。
将WrapObserver 注册到 Observer4WeakedObject 中。
Observer4WeakedObject 保存 WrapObserver 的弱引用。
将Observer4WeakedObject注册到Source完成调用链。
Observer和WrapObserver互相持有引用。一旦Observer没有被其他引用。二者形成孤岛,被GC。
风险:
因为无法精确控制GC执行时间,所以不能依赖GC来清理注册。