Objective-C:如何声明子类可见的静态成员?

时间:2009-05-10 08:46:14

标签: objective-c inheritance static

我正在声明一系列处理通信协议的静态类。我想声明一个处理常见消息的父类,如ACK,内联错误......

我需要一个静态var来保存当前正在处理的元素,我想在父类中声明它。

我这样做:

parent.m

@implementation ServerParser

static NSString * currentElement;

但是子类没有查看currentElement。

3 个答案:

答案 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.

}