KVO 做这些做完全相同的事情吗?

KVO do these do the exact same thing?

这些是否做同样的事情,如果不是,究竟有什么区别?

[self addObserver:self forKeyPath:@"user.name" options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) context:SomeContext];

[self.user addObserver:self forKeyPath:@"name" options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) context:SomeContext];

他们做的事情略有不同。前者观察 self 上的关键路径 "user.name",这意味着如果 user 或该用户的 name 发生变化,它将触发。后者在 self.user 上观察 "name",这意味着它只会在该用户的 name 更改时触发。