gpt4 book ai didi

cocoa - 有没有一种好的方法可以在保留的属性上设置 KVO?

转载 作者:行者123 更新时间:2023-12-03 17:44:23 27 4
gpt4 key购买 nike

当我想观察保留属性的变化时,我经常遇到这样的情况:

@interface AnObserver {…}
@property(retain) Foo *foo;

现在,当我想要设置观察时,我需要编写自己的 setter ,重复所有样板 setter 代码:

- (void) setFoo: (Foo*) newFoo {
if (newFoo == foo)
return;
[foo removeObserver:self forKeyPath:…];
[foo release], foo = [newFoo retain];
[foo addObserver:self forKeyPath:…];
}

这很愚蠢,因为它用样板代码污染了源代码,并且很容易错过一些东西。有没有更好的方法在保留的属性上设置 KVO?我希望我能写类似 Moose 的东西的 after 钩子(Hook),用于在属性更改后更改 KVO。

事实上,我意识到我可以观看该特性本身:

[self addObserver:self forKeyPath:@"foo"…];

然后在属性更改时更改 KVO :-),但我确实意识到这比我想避免的手写 setter 复杂得多。

想法?

最佳答案

使用关键路径怎么样?假设您想要观察 foovalue1value2 属性的变化。您可以使用:

[self addObserver:self forKeyPath:@"foo.value1"];
[self addObserver:self forKeyPath:@"foo.value2"];

然后,当这些属性发生更改时,您会收到通知。

关于cocoa - 有没有一种好的方法可以在保留的属性上设置 KVO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3804180/

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