2014-03-04 117 views
-1

我想在一个类的.h中的静态varibale,并希望它被继承到它的子类。声明公共静态变量在目标c

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

如果我这样写:

static bool isSearchWindowOpen ; 
@interface :UIViewController 
    @end 

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

请提出建议。

+0

界面声明中的冒号是什么? “继承”是什么意思?你想让变量可见吗?还是你想让每个(子)类引用它自己的变量?目前还不清楚你想要达到的目标。 –

回答

0

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

static BOOL foo; 

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

这样的类继承者可以访问变量了。但无论如何这不是一个好主意。你想解决什么问题?

1

这听起来有点像你用C++等其他编程语言混淆了这一点。在Objective-C中,就像C一样,静态变量是一个带有文件范围的变量。如果你在头文件中声明一个静态变量,那么包含该头文件的任何源文件都有自己的静态变量副本。

你可能想要一个类的方法

+ (BOOL)isSearchWindowOpen 

与实施

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

也许更好写,检查搜索窗口是否打开,而不是依赖于一个静态变量的代码你必须始终正确地跟踪。