简而言之,当属性值发生变化时,我必须更新代码中的一些逻辑,例如:
- (void)setProp:(NSString *)theProp
{
if (prop != theProp){
[prop release];
prop = [theProp copy];
[self myLogic];
}
}
或:
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
{
if ([keyPath isEqualToString:@"prop"]){
[self myLogic];
}
}
哪种方法最好,为什么?
编辑:我完善了第二种方式,因为我不知道编译器会为我生成什么 @synthesize
指令,我选择相信编译器比我的 owe setter 实现更聪明,因此我不会破坏任何东西。
最佳答案
如果您对同一对象的更改感兴趣,那么第一个片段就是要走的路。如果您对其他对象的更改感兴趣,则只需要使用第二个,用它来观察 self
是多余的。
关于objective-c - 实现自己的 setter 还是使用 KVO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5893392/