有没有一种很好的方法来设置保留属性的KVO?

时间:2010-09-27 13:23:07

标签: cocoa key-value-observing

当我想观察保留属性的变化时,我经常会遇到一个场景:

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

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

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

这是愚蠢的,因为它用样板代码污染了源代码,很容易错过一些东西。有没有更好的方法在保留属性上设置KVO?我希望我可以写一些像Mooseafter钩子来更改属性后更改KVO。

事实上,我意识到我可以看到房产本身:

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

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

想法?

1 个答案:

答案 0 :(得分:2)

使用密钥路径怎么样?假设您要观察value1的{​​{1}}和value2属性的更改。你可以使用:

foo

然后,当这些属性发生变化时,您将收到通知。