objective-c - 实现自己的 setter 还是使用 KVO?

标签 objective-c properties key-value-observing setter

简而言之,当属性值发生变化时,我必须更新代码中的一些逻辑,例如:

- (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/

相关文章:

c++ - 将 C++ 语法转换为 Objective C

c# - 将 comboBox 设置为自定义显示格式

java - 使用@PropertySource配置Spring属性

swift - Swift 4 中的 KVO 监听器问题

ios - 从核心数据中的实体获取多个字段

objective-c - 当路径上的对象可能发生变化时,观察 keyPath 是否安全?

objective-c - NSManagedObject 子类的自定义初始化

objective-c - 发布两个 NSNotifications 时的执行顺序

ios - 通过委托(delegate)选择 TableView 行是选择多行而不是一行

java - 使用 application.properties 初始化一个对象