gpt4 book ai didi

macos - 如何删除 NSNotification Observer Xamarin

转载 作者:行者123 更新时间:2023-12-03 17:46:53 24 4
gpt4 key购买 nike

我有一个扩展ReactiveWindowController的类。正如在基类中我看到的:

// subscribe to listen to window closing
// notification to support (de)activation
NSNotificationCenter
.DefaultCenter
.AddObserver(NSWindow.WillCloseNotification,
_ => deactivated.OnNext(Unit.Default), this.Window);

因此,在我的子类中,我正在编写回调来删除观察者,如下所示

public partial class SplitViewWindowController : ReactiveWindowController
{

~SplitViewWindowController()
{
Console.WriteLine("Destructor of SplitViewWindowController");
}

public SplitViewWindowController() : base("SplitViewWindow")
{
Console.WriteLine("Constructor of SplitViewWindowController");

this.Deactivated.Take(1).Subscribe(x => {

// NSNotificationCenter.DefaultCenter.RemoveObserver(NSWindow.WillCloseNotification);

// NSNotificationCenter.DefaultCenter.RemoveObserver(this);

//NSNotificationCenter.DefaultCenter.RemoveObserver(Owner);

});
}

但是我找不到合适的方法来删除观察者。或者我在这里做错了什么?

为什么我要删除观察者?答案是,如果任何观察者仍未注册,则此 SplitViewController 不会被释放。我尝试使用 NSWindowController,如果所有观察者都被删除,则释放将起作用并打印析构函数的日志。如果我不删除观察者,即使从 NSWindowController 子类化,它也不会调用析构函数。

所以修复方法是删除观察者,但是如何删除呢?

最佳答案

保存创建的观察者,然后在需要时删除并处置它:

var observer = NSNotificationCenter.DefaultCenter.AddObserver(NSWindow.WillCloseNotification, HandleAction);
// You can also use the helper method...
// var observer = NSWindow.Notifications.ObserveWillClose(HandleEventHandler);

NSNotificationCenter.DefaultCenter.RemoveObserver(observer);
observer.Dispose();

关于macos - 如何删除 NSNotification Observer Xamarin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52952483/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com