2010-08-30 41 views
2

當然,我有兩個自己的.h和.m文件的視圖。我怎樣才能在一個視圖中聲明一個bool(或任何變量),並打包在另一個視圖中訪問它?iPhone全局變量?

謝謝。

+0

需要更多信息,他們在導航控制器中的意見?或者他們只是上課? – 2010-08-30 14:52:29

+0

我的道歉,在導航控制器中的意見。 – 2010-08-30 14:57:32

+0

在下面的鏈接閱讀答案,它清楚地解釋http://stackoverflow.com/a/20423815/730807 – 2014-06-28 09:05:49

回答

4

目標C是普通的ANSI C的超集,所以你會創建和使用全局變量作爲老式C.

在只有一個.M或.c文件,把完全相同的方式:

BOOL gMyGlobalBoolVar = NO; // or YES, depending on whatever initial state is needed 

我可能會將這些放置在一個集中的單例類(如appdelegate .m文件)中,或放在單獨的.c文件(如myGlobals.c)中。我通常將這些放在#imports/includes之後,但在任何類,方法或函數定義之前,以澄清它們可以在任何對象或函數之外訪問。

在爲要訪問gMyGlobalBoolVar所有類的.h文件,提出:

extern BOOL gMyGlobalBoolVar; 

然後,只需使用類中的任何地方他們:

if ([ self dogHasFleas ]) { 
    gMyGlobalBoolVar = YES; 
} 

使用全局變量是目前不是「政治上正確」的,但對於你永遠不會嘗試發佈,重用,擴展或尋找粗糙的bug的快速代碼,它們的工作方式就像在幾乎所有計算機和編程語言中的工作一樣。

+0

我很困惑,爲什麼他們如此反對。我計劃發佈這個應用程序,所以最好讓它整潔,整潔,快速和簡潔。 那麼,如果我確實需要全局訪問這個變量,那麼最佳選擇是什麼? – 2010-08-30 17:23:49

0

你可以引用包含bool的視圖並使用getter獲取變量。

如果你想要應用程序的廣泛變量,你可以把它們放在AppDelegate中,但我強烈建議不要這樣做,因爲它緊密結合了類。

0

創建一個數據模型類。在您的應用程序委託中實例化它,並將它傳遞給您的視圖控制器。使用鍵值觀察來跟蹤視圖控制器中對模型的更改。看到我的答案在這裏:How do I display and calculate numbers from a database on iPhone?

「爲什麼我不應該使用全局變量?它不能傷害這一次。」這是一個不好的習慣。避免使用全局變量會使您的代碼更易於閱讀和重用,更易於擴展並且更易於調試。