読み取り専用プロパティを持つクラスがあると仮定します。
//MyClass.h
@interface MyClass
@property (readonly) NSInteger MonitorMe;
@end
ここで、このプロパティのポイントが、別のオブジェクト内の別のプロパティの変更を監視することであり、プロパティが「監視」されると、他の外部オブジェクトからの値を検査することによって派生値を返すと仮定します。
//MyClass.m
@implementation
@synthesize MonitorMe;
-(NSInteger) getMonitorMe
{
return globalStaticClass.OtherNSInteger;
}
... Inits and Methods ...
@end
ここで、MyClass
オブジェクトのインスタンスを作成し、プロパティにKVOオブザーバーを追加したいとしMonitorMe
ます。
//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
。私の実際の状況では、読み取り専用プロパティが私の例よりもはるかに複雑であるため、その答えは十分ではありません。