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

标签 objective-c inheritance static

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

我需要一个静态变量来维护当前正在处理的元素,我想在父类中声明它。

我是这样做的:

parent .m

@implementation ServerParser

static NSString * currentElement;

但是子类没有看到 currentElement。

最佳答案

如果您在类的实现文件中声明了一个静态变量,那么该变量只对那个类可见。

您可以在类的头文件中声明静态变量,但是,它对所有#import 头文件的类都是可见的。

一种解决方法是在父类中声明静态变量,正如您所描述的,同时创建一个类方法来访问该变量:

@implementation ServerParser

static NSString *currentElement;
...
+ (NSString*)currentElement
{
    return currentElement;
}
...
@end

然后,您可以调用以下方法获取静态变量的值:

[ServerParser currentElement];

然而,除非其他类使用该方法,否则该变量将不可见。

关于Objective-C:如何声明一个对子类可见的静态成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/844958/

相关文章:

ios - 使 UITableView 行可选择

c++ - 没有可行的重载 '=' 和继承

java - main 方法调用非静态方法

c++ - 为什么调用静态成员函数。或 -> 语法合法?

actionscript-3 - Actionscript-3 中静态构造函数的语法?

iphone - iPad 中的大对话框

objective-c - strftime %e 个位数天数之前没有空白?

iphone - 为 UITableViewController 子类重写哪个初始化器

c++ - 有没有办法让成员参数类型成为指向派生类的指针

c# - 如何使用反射获取接口(interface)的所有实现?