特に達成したいことはありませんが、クラス拡張についてもっと学びたいと思っています。
これは、アップルのカテゴリと拡張から直接クラス拡張の説明です:
@interface MyClass : NSObject
@property (retain, readonly) float value;
@end
// Private extension, typically hidden in the main implementation file.
@interface MyClass ()
@property (retain, readwrite) float value;
@end
ただし、MyClass を拡張する MyClass2 があると仮定すると、それは私には完全に理にかなっています。
@interface MyClass2 : MyClass
@property (retain, readwrite) float value;
@end
クラス拡張が関係していなければ、簡単に答えることができるいくつかの質問があります。
- 実行時に、MyClassで割り当てself.value=2を行っているとき、または単にfloat x=self.valueを呼び出しているときに、どのセッターとゲッター @property が呼び出されますか? MyClass または MyClass2 ?
- コンパイラは、少なくとも読み取り専用プロパティが再定義されているという警告を発行するべきではありませんか?
- @property が ivar によってサポートされていることは知っていますが、最終的にいくつの ivar があるのでしょうか? これに関連して、ivarが設定するMyClass2の観点から同じ self.value を呼び出しますか?