サブクラスによって「オーバーライド」できるクラス変数について、Objective-C で適切なパターンは何でしょうか?
通常のクラス変数は、通常、クラス メソッドとして定義された公開されたアクセサーと共にファイル ローカルな静的変数を使用して、Objective-C でシミュレートされます。
ただし、これはクラス変数と同様に、クラスとそのすべてのサブクラスの間で値が共有されることを意味します。場合によっては、サブクラスがそれ自体の値のみを変更すると興味深いことがあります。これは通常、構成にクラス変数が使用される場合に当てはまります。
例を次に示します。一部の iOS アプリでは、特定の共通抽象スーパークラス (注釈) の多くのオブジェクトがあり、それらは多くの具体的なバリエーション (サブクラス) になります。すべての注釈はラベルでグラフィカルに表現され、ラベルの色はその注釈の特定の種類 (サブクラス) を反映する必要があります。したがって、すべての Foo 注釈には緑色のラベルが必要であり、すべての Bar 注釈には青色のラベルが必要です。各インスタンスにラベルの色を保存するのは無駄です (実際には、多くのオブジェクトがあり、実際の構成データ (各インスタンスに共通) は単一の色よりもはるかに大きいため、おそらく不可能です)。
実行時に、ユーザーはすべての Foo 注釈に赤いラベルを付けるように決定できます。等々。
Objective-C ではクラスは実際のオブジェクトであるため、Foo クラス オブジェクトに Foo ラベルの色を格納する必要があります。しかし、それは可能ですか?この種のものにはどのようなパターンが適していますか? もちろん、クラスをその構成値にマッピングするある種のグローバル辞書を定義することは可能ですが、それはちょっと見苦しいものです。