假设我有一个带有只读属性的类。
//MyClass.h
@interface MyClass
@property (readonly) NSInteger MonitorMe;
@end
现在,让我们假设该属性的目的是监视另一个对象内另一个属性的变化,并且当“观察”该属性时,它通过检查来自另一个外部对象的值来返回派生值。
//MyClass.m
@implementation
@synthesize MonitorMe;
-(NSInteger) getMonitorMe
{
return globalStaticClass.OtherNSInteger;
}
... Inits and Methods ...
@end
现在,让我们假设在某些地方我创建了一个MyClass
对象的实例,并且我想在该MonitorMe
属性上添加一个 KVO 观察者。
//AnotherClass.m
@implementation AnotherClass.m
@synthesize instanceOfMyClass;
-(id)init
{
...
instanceOfMyMethod = [MyClass init];
[MyClass addObserver: self
forKeyPath: @"MonitorMe"
options: NSKeyValuObservingOptionNew
context: nil];
...
}
我的问题是,由于该MonitorMe
属性只监视外部对象中值的变化,所以观察者方法会在值globalStaticClass.OtherNSInteger
变化时执行吗?另外,如果答案是肯定的,这是如何完成的?
如果这行得通,对我来说这似乎是编译器巫术。
笔记
我不认为这有什么区别,但我正在使用 ARC 来实现这个实现,并且我正在为 iOS 设备进行编译。对于这类问题,我怀疑 OS X 和 iOS 之间存在编译差异,但如果重要的话,我有一个 iOS 项目需要上面概述的这种实现。
此外,上面概述的示例是我实际需求的一个非常基本的设置。可以说我可以/应该向值添加观察globalStaticClass.OtherNSInteger
值而不是只读属性,MonitorMe
. 在我的实际情况下,这个答案是不够的,因为我的只读属性比我的例子复杂得多。