在目标c中声明公共静态变量

时间:2014-03-04 09:19:49

标签: ios iphone objective-c

我想要一个类的.h中的静态变量,并希望它继承到它的子类。

@interface :UIViewController
static bool isSearchWindowOpen ; //something like this.
@end

如果我这样写:

static bool isSearchWindowOpen ; 
@interface :UIViewController
    @end

它工作正常但不能由子类继承。

建议。

2 个答案:

答案 0 :(得分:1)

这听起来有点像你把它与其他一些编程语言混淆,比如C ++。在Objective-C中,就像C一样,静态变量是具有文件范围的变量。如果在头文件中声明静态变量,则包含该头文件的任何源文件都有自己的静态变量副本。

你可能想要一个类方法

+ (BOOL)isSearchWindowOpen

实施

static BOOL sSearchWindowOpen;
+ (void)setSearchWindowOpen:(BOOL)open { sSearchWindowOpen = open; }
+ (BOOL)isSearchWindowOpen { return sSearchWindowOpen; }

编写检查搜索窗口是否打开的代码可能更好,而不是依赖于必须始终正确跟踪的静态变量。

答案 1 :(得分:0)

声明的变量与类无关。它是“C sense”中的全局​​静态:只有同一文件中的代码才能访问它。 (See Wikipedia for details。)您可以编写类访问器:

static BOOL foo;

+ (void) setFoo: (BOOL) newFoo
{
    foo = newFoo;
}

这样,类后代也可以访问变量。但无论如何,这不是一个好主意。你想解决什么问题?