Objective-C: как объявить статический член, видимый для подклассов?
Я объявляю семейство статических классов, которые имеют дело с протоколом связи. Я хочу объявить родительский класс, обрабатывающий общие сообщения, такие как ACK, встроенные ошибки...
Мне нужно иметь статический var, который обрабатывает текущий обрабатываемый элемент, и я хочу объявить его в родительском классе.
Я делаю это так:
parent.m
@implementation ServerParser
static NSString * currentElement;
но подклассы не используют текущий элемент.
Ответы
Ответ 1
Если вы объявляете статическую переменную в файле реализации класса, то эта переменная видна только этому классу.
Вы можете объявить статическую переменную в заголовочном файле класса, однако она будет видна для всех классов, которые #import
заголовок.
Обходным путем было бы объявить статическую переменную в родительском классе, как вы описали, но также создать метод класса для доступа к переменной:
@implementation ServerParser
static NSString *currentElement;
...
+ (NSString*)currentElement
{
return currentElement;
}
...
@end
Затем вы можете получить значение статической переменной, вызвав:
[ServerParser currentElement];
Однако переменная не будет видна другим классам, если они не используют этот метод.
Ответ 2
Обходным путем было бы объявить статическую переменную в реализации родительского класса И также объявить свойство в родительском классе.
Затем в методах доступа доступ к статической переменной. Таким образом, вы можете получить доступ к статическим переменным, таким как свойства с синтаксисом точек. Все подклассы получают доступ к одной и той же общей статической переменной.
Ответ 3
Проще. Создайте класс pre Base с защищенной статической переменной. Например:
public abstract class preBase {
protected static int VariableStaticPrivate;
}
public abstract class Base: preBase {
//Inherit VariableStaticPrivate
//And you can use it.
}
открытый класс DerivedOne: Base {
//Also inherit VariableStaticPrivate
//And you can use it.
}