KVO:如何观察普通指针?

时间:2016-03-05 11:56:54

标签: objective-c key-value-observing

我们一直在使用KVO来跟踪对象中的一些变化。最近我们将代码更改为c ++,将其放入多平台库中。

这给我们留下了一些属性,这些属性现在是指向c ++对象的指针,但是同样的推理也适用于void *,或任何指向什么不是真正的Objective-C对象的指针。

基本上我们有

@property (nonatomic) void *value;

出现了一些问题:

  • 不会自动生成更改通知。

这可以通过手动实施setter来处理,即

-(void)setValue:(void *)value {
    [self willChangeValueForKey:@"value"];
    _value = value;
    [self didChangeValueForKey:@"value"];
}
  • 该类与密钥不符合KVO标准。

这似乎很自然,因为它不清楚如何将自定义数据放入某些对象传递。这会破坏在更改字典中请求旧数据或新数据的观察者。再一次,人们可以在这里帮助自己并手动包装:

-(id)valueForKey:(NSString *)key {
    if ([key isEqualToString:@"value"])
        return [NSValue valueWithPointer:_value];
    return [super valueForKey:key];
}

因此,我已经解决了一些故障,我想知道是否还有更多陷阱需要注意。或者在这方面有一些最佳做法吗?

0 个答案:

没有答案