Какой будет хороший шаблон в Objective-C для переменных класса, которые могут быть "переопределены" подклассами?
Переменные обычного класса обычно моделируются в Objective-C с использованием локальных статических переменных файла вместе с открытыми средствами доступа, определенными как методы класса.
Однако это, как и любые переменные класса, означает, что значение является общим для класса и всех его подклассов. Иногда для подкласса интересно изменить значение только для себя. Обычно это тот случай, когда переменные класса используются для конфигурации.
Вот пример: в некоторых приложениях для iOS у меня есть много объектов данного общего абстрактного суперкласса (Аннотация), которые бывают нескольких конкретных вариаций (подклассов). Все аннотации представлены графически с меткой, а цвет метки должен отражать конкретный вид (подкласс) ее аннотации. Поэтому все аннотации Foo должны иметь зеленую метку, а все аннотации Bar должны иметь синюю метку. Хранение цвета метки в каждом экземпляре было бы расточительным (и в действительности, возможно, невозможным, поскольку у меня много объектов, а фактические данные конфигурации - общие для каждого экземпляра - намного больше, чем один цвет).
Во время выполнения пользователь может решить, что все аннотации Foo теперь будут иметь красную метку. И так далее.
Поскольку в Objective-C классы являются фактическими объектами, это требует сохранения цвета метки Foo в объекте класса Foo. Но возможно ли это? Что будет хорошим примером для такого рода вещей? Конечно, можно определить какой-то глобальный словарь, сопоставляющий класс с его значением конфигурации, но это было бы некрасиво.