Просто создайте обычный метод получения для вашей переменной класса, и вы можете переопределить его в подклассе. Просто не забудьте получить к нему доступ через метод.
static SomeClass *gClassVar;
@implementation ClassA
+ (SomeClass *)classVar {
if (!gClassVar)
gClassVar = ...;
return gClassVar;
}
+ (...)someMethod {
[[self classVar] doSomething];
}
@end
Тогда
static SomeClass *gClassVar;
@implementation ClassASubclass
+ (SomeClass *)classVar {
if (!gClassVar)
gClassVar = ...;
return gClassVar;
}
@end
Итак, когда вы вызываете [ClassA someMethod]
, он будет работать на ClassA
экземпляре classVar
. Когда вы вызываете [ClassASubclass someMethod]
, он будет работать на экземпляре ClassASubclass
.
Идея иметь переменные любого вида, прикрепленные к объекту (классу или экземпляру), является функцией, которая как бы «скрепляется» с Objective C. В любое время, когда вы хотите сделать что-либо объектно-ориентированное с помощью Objective C, начните работая с методами. (Почти) все остальное - просто синтаксический сахар для вещей, которые вы можете делать с помощью методов.
Концепция частного / защищенного / публичного несколько чужды Задаче C, хотя контроль переменных поддерживается для переменных-членов. Лучшее, что вы можете сделать для методов, это определить их в отдельном заголовке (и это относится к переменным и свойствам класса, если мы реализуем оба с использованием методов).