靜態變量
當我們希望一個變量的作用域不僅僅是作用域某個類的某個對象,而是作用域整個類的時候,這時候就可以使用靜態變量。
staticstatic修飾的變量,是一個私有的全局變量。C或者Java中static關鍵字修飾的變量,可以使用類名直接拿到這個變量對象,在其他類中可以進行修改。但是在OC中static修飾的變量是不能通過類名直接訪問的,它只作用於它聲明所在的.m文件中。static修飾的變量必須放在@implementation外面或方法中,它只在程序啟動初始化一次。
static int num;
靜態常量
constconst修飾的變量是不可變的,如果需要定義一個時間間隔的靜態常量,就可以使用const修飾。
static const NSTimeInterval LMJTimeDuration = 0.5;
如果試圖修改TimeDuration編譯器則會報錯。
如果我們定義一個字符串類型的靜態常量就要注意了,這兩種寫法是一樣的,而且是可以修改的。
static NSString const * LMJName = @"iOS開發者公會"; static const NSString * LMJName = @"iOS開發者公會";
這兩種寫法cons修飾的是* LMJName,*是指針指向符,也就是說此時指向內存地址是不可變的,而內存保存的內容時可變的。
所以我們應該這樣寫:
static NSString * const LMJName = @"iOS開發者公會";
當我們定義一個對象類型常量的時候,要將const修飾符放到*指針指向符后面。
全局變量
extern
extern修飾的變量,是一個全局變量。
extern NSString * LMJName = @"iOS開發者公會;
extern修飾的變量也可以添加const進行修飾:
extern NSString * const LMJName = @"iOS開發者公會;
此時全局變量只能被初始化一次extern定義的全局常量的用法和宏定義類似,但是還是有本質上的不同的。 extern定義的全局常量更不容易在程序中被無意竄改。
版權聲明:出自MajorLMJ技術博客的原創作品 ,轉載時必須注明出處及相應鏈接!
