gpt4 book ai didi

objective-c - 删除观察者

转载 作者:行者123 更新时间:2023-12-03 16:53:26 25 4
gpt4 key购买 nike

在 NSManagedObject 子类中,我有代码......

- (void) awakeFromInsert { 
[self addObserver:[NSApp delegate] forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:nil];
}

这将我的应用程序委托(delegate)添加为观察者,我现在想要做的是从我的应用程序委托(delegate)内部,我想将其自身作为 NSManagedObject 子类的观察者删除。

我该怎么做?谢谢。

我正在考虑将其添加到我的应用程序委托(delegate)中

[JGManagedObject removeObserver:self forKeyPath:@"name"];

但不幸的是 removeObserver:forKeyPath: 不是类方法。

最佳答案

对于这样的事情,最好重新考虑设计。在这种情况下,委托(delegate)必须对托管对象本身有一些特定的了解才能做到这一点——并且委托(delegate)必须了解在生命周期中何时应该(或想要)停止观察对象。

你有几个选择。您可以让委托(delegate)在创建它时开始观察它,然后在它放弃所有权时停止观察它,而不是在插入唤醒时执行此操作。如果这在您的设计中不可行,您可以让对象在释放时删除其观察者。如果这是“即发即弃”(基本上委托(delegate)只关心一次),您可以在第一个更改通知后删除观察者。然而,由于您是在该对象的创建生命周期内创建了观察,因此最好在对象销毁时删除该观察:

- (void)dealloc
{
[self removeObserver:[NSApp delegate] forKeyPath:@"name"];
// other clean-up
[super dealloc];
}

您可能还希望在对象从获取和故障中唤醒时执行此操作,并在对象将成为故障时释放观察者。

关于objective-c - 删除观察者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1564540/

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