【发布时间】:2015-05-23 13:13:59
【问题描述】:
我有 A 类,实例变量从缓存数据派生属性,这个缓存数据表示为单例并且是 A 的一部分(它本质上是一个 NSDictionary)。有时,此缓存会被修改。
发生这种情况时,我希望所有 A 实例在下次访问它们的属性时从缓存中提取新信息,或者换句话说,使它们的属性内容无效。
到目前为止,每个实例都是手动通知的(使用静态数组来跟踪成员)。我不是粉丝。通知中心可能有一个选项,但我宁愿尝试使用 KVO。
有没有人设法从 iOS 上的类变量订阅 KVO 更改? (换句话说,使用 A 的静态变量的变化来告诉 A 实例刷新它们的数据。)
换句话说,我很想拥有
static void* context = &context;
static myHadHocObject* msignal;
及更高版本的 A 类代码
[msignal addObserver:self forKeyPath:@"operation" options:NSKeyValueObservingOptionNew context:context];
并通过
通知类实例中的 msignal 更改-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
}
我尝试使用各种 had hoc 课程,但没有成功。好像我错过了什么。
欢迎指点,谢谢!
【问题讨论】:
-
如果它不是静态的,你能观察到它的变化吗?将其设为静态不应影响 KVO,因此我认为该事件更有可能永远不会被触发。
-
Objective-C 没有“类变量”。
-
@user102008 同上。对静态进行了更改。 chedabob,你是对的,但由于某些原因,我看不出问题出在哪里。 meligaletiko 提出了一种比我使用的更清洁的方法。
标签: ios objective-c design-patterns key-value-observing