インスタンス変数がクラスのインスタンスに属している場合、クラス変数はメタクラスのインスタンスに属していると思います。しかし、Objective-Cメタクラスでの私の経験から、これはありそうもないことがわかります。
class_getClassVariable
とは対照的に何が行われるclass_getInstanceVariable
のか、なぜclass_setClassVariable
ランタイムにがないのか疑問に思っています。
インスタンス変数がクラスのインスタンスに属している場合、クラス変数はメタクラスのインスタンスに属していると思います。しかし、Objective-Cメタクラスでの私の経験から、これはありそうもないことがわかります。
class_getClassVariable
とは対照的に何が行われるclass_getInstanceVariable
のか、なぜclass_setClassVariable
ランタイムにがないのか疑問に思っています。
ここでそれに関する議論を見つけました: http://lists.apple.com/archives/objc-language/2008/Feb/msg00021.html
いいえ、それは不可能です。コンパイラ サポートはなく、ランタイム サポートもありません。
class_getClassVariable(cls, name)
単に呼び出しますclass_getInstanceVariable(cls->isa, name)
。可能であれば、とにかく各サブクラスで新しい変数を提供しない可能性があります。Objective-C のメタクラスは、それがうまく機能するのに十分なファーストクラスではありません。
Objective C にはクラス変数のようなものがないため、class_getClassVariable() 関数は意味がありません。
私の推測では、クラス変数はランタイムでサポートされていますが、言語ではサポートされていません。