2014-03-04 42 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; } 

也許更好寫,檢查搜索窗口是否打開,而不是依賴於一個靜態變量的代碼你必須始終正確地跟蹤。