gon*_*nso 22 inheritance static objective-c
我正在声明一系列处理通信协议的静态类.我想声明一个处理常见消息的父类,如ACK,内联错误......
我需要一个静态var来保存当前正在处理的元素,我想在父类中声明它.
我是这样做的:
parent.m
@implementation ServerParser
static NSString * currentElement;
Run Code Online (Sandbox Code Playgroud)
但是子类没有查看currentElement.
Ale*_*ski 35
如果您在声明一个类的实现文件的静态变量,则该变量是只看到那个班.
您可以在类的头文件中声明静态变量,但是,它#import对于标头的所有类都是可见的.
一种解决方法是在父类中声明静态变量,如您所述,但也创建一个类方法来访问变量:
@implementation ServerParser
static NSString *currentElement;
...
+ (NSString*)currentElement
{
return currentElement;
}
...
@end
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过调用以下方法检索静态变量的值:
[ServerParser currentElement];
Run Code Online (Sandbox Code Playgroud)
然而,除非他们使用该方法,否则该变量对其他类不可见.
解决方法是在父类的实现中声明静态变量,并在父类中声明属性.然后在accessor方法中访问静态变量.这样,您可以使用点语法访问静态变量,例如属性.所有子类都访问相同的共享静态变量.