如何在main.m
文件中聲明一個變量,以便它在所有類中都可用?objective-c - 全局變量
如果我只是在main
函數中聲明它,編譯器會說它在類方法中是未聲明的。
我必須在這樣的對象中聲明它嗎?
@public
type variable;
如何在main.m
文件中聲明一個變量,以便它在所有類中都可用?objective-c - 全局變量
如果我只是在main
函數中聲明它,編譯器會說它在類方法中是未聲明的。
我必須在這樣的對象中聲明它嗎?
@public
type variable;
所有你需要的是使用普通的舊C全局變量。
首先,在你main.m
定義一個變量,你main
函數之前:
#import <...>
// Your global variable definition.
type variable;
int main() {
...
其次,你需要讓其他源文件瞭解它。你需要聲明它在一些.h
文件並導入該文件中的所有你需要的變量.m
文件:
// .h file
// Declaration of your variable.
extern type variable;
請注意,您不能賦值在聲明塊變量,否則就變成了一個定義變量,並且以鏈接器錯誤結束抱怨同一名稱的多個定義。
爲了把事情說清楚:每個變量可以是宣佈多次(宣言說,這個變量存在於某個地方),但定義只有一次(定義實際上該變量創建的內存)。
但要小心,全局變量是一種錯誤的編碼習慣,因爲它們的值可能會在任何文件中被意外更改,因此您可能會遇到很難調試的錯誤。例如,您可以使用單例模式避免全局變量。
不太確定你爲什麼要這樣做,但你可以,如果你想。
的main.m:
int someGlobal = 0; ///< Added outside any function, at the top say.
SomeClass.m:
extern int someGlobal; ///< Added at the top, outside the class implementation.
...
- (void)useGlobal {
NSLog(@"someGlobal = %i", someGlobal);
someGlobal = 5;
NSLog(@"someGlobal = %i", someGlobal);
}
但請仔細想一想在開始使用這樣的事情之前!
爲什麼要小心?我不明白風險會是什麼 – Sirens 2013-03-25 18:37:19
風險將是不可維護的代碼或可能很難追蹤錯誤。 – mattjgalloway 2013-03-25 20:03:54
我在互聯網上看到的關於全球變量的每一篇文章都有關於「小心」的警告,還有一些人說「爲什麼要小心?」。哈哈,它總是一樣的爵士樂。 那些不想小心的人:認爲其他人一次又一次地警告你的隱藏理由;) – tothemario 2014-08-18 18:55:19
除了調試,我沒有理由甚至嘗試修改main.m文件以直接與您的應用程序邏輯進行交互。
如果符合您的需要,您可以嘗試在Your_project_name_Prefix.pch文件上定義常量。或者在應用程序委託或應用程序的任何類中聲明一個靜態變量。
要了解更多關於常量和靜態變量,請點擊此鏈接:
但是,如果你需要對var的readwrite訪問,這是行不通的。 E.例如,如果您想存儲所有類都可以訪問的密碼或會話ID。 – 2014-05-27 11:29:16
伊莫,全局變量實際上使大量的目標C意義上說,鑑於趨勢的很多事情自然會單身人士,尤其是視圖控制器。在這種情況下,它們更像常量而不是變量。 – devios1 2013-08-04 04:39:51
實際上,單身人士使用全局變量 - 共享實例 - 從而使每個成員都成爲全局變量;你只能用另一種替代一種全球性。 – Cristik 2015-10-22 08:43:58