我有一个属性到我班级的对象实例
@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
只能在类中设置。
答案 0 :(得分:3)
有更好的方法:
+ (NSSet *)keyPathsForValuesAffectingHasMyObject {
return [NSSet setWithObject:@keypath(ClassName.new, myObject)];
}
当然,ClassName.new
实际上从未被评估过(查看@keypath
的扩展),但这是从类方法获取实例keypath的唯一方法。