相关疑难解决方法(0)

如何判断对象是否附加了键值观察器

如果你告诉一个目标c对象removeObservers:对于一个关键路径并且该关键路径尚未注册,它会破坏sads.喜欢 -

'无法删除关键路径"theKeyPath"的观察者,因为它未注册为观察者.

有没有办法确定一个对象是否有一个注册的观察者,所以我可以做到这一点

if (object has observer){
  remove observer
}
else{
  go on my merry way
}
Run Code Online (Sandbox Code Playgroud)

cocoa key objective-c key-value-observing

141
推荐指数
3
解决办法
6万
查看次数

实施自己的setter或使用KVO?

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

- (void)setProp:(NSString *)theProp
{
  if (prop != theProp){
    [prop release];
    prop = [theProp copy];
    [self myLogic];
  }
}
Run Code Online (Sandbox Code Playgroud)

要么:

- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary *)change
                       context:(void *)context
{
  if ([keyPath isEqualToString:@"prop"]){
    [self myLogic];
  }  
}
Run Code Online (Sandbox Code Playgroud)

哪种方式最好,为什么?

编辑:我完全采用第二种方式,因为我不知道编译器会@synthesize为我生成指令,我选择相信编译器比我欠的setter实现更聪明,因此我不会破坏某些东西.

setter properties objective-c key-value-observing

12
推荐指数
2
解决办法
3333
查看次数

NSNotification VS KVO

我觉得我不完全理解KVO和NSNotification之间的区别......它们似乎是如此相似......你能举一些例子说明何时最好使用一种方法而另一种方法?

我不是说Bind和IB,但我的意思是在我的代码中使用NSNotificationCenter或KVO以编程方式添加Observer

[self.preferenceController addObserver:self 
                                    forKeyPath:@"color" 
                                       options:NSKeyValueObservingOptionOld 
                                       context:@"Color-change"
];
Run Code Online (Sandbox Code Playgroud)

cocoa objective-c key-value-observing nsnotificationcenter swift

6
推荐指数
1
解决办法
1600
查看次数