关于帮助财产的KVO

时间:2014-09-11 11:53:57

标签: objective-c key-value-observing reactive-cocoa

我有一个属性到我班级的对象实例

@property(nonatomic, strong) MyObject *myObject;

我公开了一个帮手属性。

@property(nonatomic, assign, readonly) BOOL hasMyObject

哪个

return self.myObject != nil;

我需要hasMyObject符合KVO(我正在使用RAC)。为了解决这个问题,我现在打电话给:

- (void)app_setMyObject:(MyObject*)myObject
{
    [self willChangeValueForKey:@keypath(self.hasMyObject)];
    self.myObject = myObject;
    [self didChangeValueForKey:@keypath(self.hasMyObject)];
}

每次我设置myObject。

通过这种方式,观察者可以知道hasMyObject何时发生变化 我的问题是:
这可以吗 2.有更好的方法吗?


为什么我要这样做?
为什么不使用myObject属性?

这是一个API设计的东西。 myObject属性是内部属性,不应公开显示,myObject只能在类中设置。

1 个答案:

答案 0 :(得分:3)

有更好的方法:

+ (NSSet *)keyPathsForValuesAffectingHasMyObject {
    return [NSSet setWithObject:@keypath(ClassName.new, myObject)];
}

当然,ClassName.new实际上从未被评估过(查看@keypath的扩展),但这是从类方法获取实例keypath的唯一方法。