我正在声明一系列处理通信协议的静态类。我想声明一个处理常见消息的父类,如ACK,内联错误......
我需要一个静态var来保存当前正在处理的元素,我想在父类中声明它。
我这样做:
parent.m
@implementation ServerParser
static NSString * currentElement;
但是子类没有查看currentElement。
答案 0 :(得分:34)
如果在类的实现文件中声明静态变量,则该变量仅对 类可见。
您可以在类的头文件中声明静态变量,但是,#import
标题的所有类都可以看到它。
一种解决方法是在父类中声明静态变量,如您所述,但也创建一个类方法来访问变量:
@implementation ServerParser
static NSString *currentElement;
...
+ (NSString*)currentElement
{
return currentElement;
}
...
@end
然后,您可以通过调用:
来检索静态变量的值[ServerParser currentElement];
然而,除非他们使用该方法,否则该变量对其他类不可见。
答案 1 :(得分:5)
解决方法是在父类的实现中声明静态变量,并在父类中声明属性。 然后在accessor方法中访问静态变量。这样,您可以使用点语法访问静态变量,例如属性。所有子类都访问相同的共享静态变量。
答案 2 :(得分:-2)
更简单。创建一个带有受保护静态变量的pre Base类。例如:
public abstract class preBase {
protected static int VariableStaticPrivate;
}
公共抽象类Base:preBase {
//Inherit VariableStaticPrivate
//And you can use it.
}
公共类DerivedOne:Base {
//Also inherit VariableStaticPrivate
//And you can use it.
}