靜態(tài)變量
當(dāng)我們希望一個(gè)變量的作用域不僅僅是作用域某個(gè)類的某個(gè)對象,而是作用域整個(gè)類的時(shí)候梆暮,這時(shí)候就可以使用靜態(tài)變量服协。
static
static
修飾的變量,是一個(gè)私有的全局變量啦粹。
C
或者Java
中static
關(guān)鍵字修飾的變量偿荷,可以使用類名直接拿到這個(gè)變量對象窘游,在其他類中可以進(jìn)行修改。但是在OC
中static
修飾的變量是不能通過類名直接訪問的跳纳,它只作用于它聲明所在的.m文件中忍饰。
static
修飾的變量必須放在@implementation
外面或方法中,它只在程序啟動(dòng)初始化一次寺庄。
static int num;
靜態(tài)常量
const
const
修飾的變量是不可變的艾蓝,如果需要定義一個(gè)時(shí)間間隔的靜態(tài)常量,就可以使用const
修飾斗塘。
static const NSTimeInterval LMJTimeDuration = 0.5;
如果試圖修改TimeDuration
編譯器則會(huì)報(bào)錯(cuò)饶深。
如果我們定義一個(gè)字符串類型的靜態(tài)常量就要注意了,這兩種寫法是一樣的逛拱,而且是可以修改的。
static NSString const * LMJName = @"iOS開發(fā)者公會(huì)";
static const NSString * LMJName = @"iOS開發(fā)者公會(huì)";
這兩種寫法cons
修飾的是* LMJName
,*
是指針指向符台猴,也就是說此時(shí)指向內(nèi)存地址是不可變的朽合,而內(nèi)存保存的內(nèi)容時(shí)可變的。
所以我們應(yīng)該這樣寫:
static NSString * const LMJName = @"iOS開發(fā)者公會(huì)";
當(dāng)我們定義一個(gè)對象類型常量的時(shí)候饱狂,要將const
修飾符放到*
指針指向符后面曹步。
全局變量
extern
extern修飾的變量,是一個(gè)全局變量休讳。
extern NSString * LMJName = @"iOS開發(fā)者公會(huì);
extern
修飾的變量也可以添加const
進(jìn)行修飾:
extern NSString * const LMJName = @"iOS開發(fā)者公會(huì);
此時(shí)全局變量只能被初始化一次
extern
定義的全局常量的用法和宏定義類似讲婚,但是還是有本質(zhì)上的不同的。 extern
定義的全局常量更不容易在程序中被無意竄改俊柔。
版權(quán)聲明:出自MajorLMJ技術(shù)博客的原創(chuàng)作品 筹麸,轉(zhuǎn)載時(shí)必須注明出處及相應(yīng)鏈接!