iOS定義靜態(tài)變量、靜態(tài)常量、全局變量

靜態(tài)變量

當(dāng)我們希望一個(gè)變量的作用域不僅僅是作用域某個(gè)類的某個(gè)對象,而是作用域整個(gè)類的時(shí)候,這時(shí)候就可以使用靜態(tài)變量。

static

static修飾的變量,是一個(gè)私有的全局變量。

C或者Javastatic關(guān)鍵字修飾的變量,可以使用類名直接拿到這個(gè)變量對象,在其他類中可以進(jìn)行修改。但是在OCstatic修飾的變量是不能通過類名直接訪問的,它只作用于它聲明所在的.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)鏈接!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容