Static
1.what?
static 靜態(tài)的意思,用于修飾一個(gè)變量,作為私有的全局變量, 僅僅用static 修飾的變量是一個(gè)靜態(tài)變量
2.why?
我們想把一個(gè)變量的作用域擴(kuò)展到整個(gè)類的時(shí)候,如果僅僅是這樣的話,其實(shí)我們的OC里的屬性完全可以替代。那么我們?yōu)槭裁催€會(huì)用到它呢?其實(shí)被static 修飾的變量或者是常量都有一個(gè)比較重要的特性,它會(huì)存在靜態(tài)區(qū),只初始化一次。這是我們可能想用到它,最大一個(gè)特點(diǎn)吧
3.how?
static int a = 0; 可以初始化,也可以不初始化,不初始化默認(rèn)的就是0
Const
1.what?
被用來修飾常量的,表示是一個(gè)常量,修飾的變量是不可變的
2.why?
正如上邊說的,就是因?yàn)樗揎椀淖兞渴且粋€(gè)不可改變的,所以我們才會(huì)用到他
3.how?
可以加上static 修飾變量 static NSString * const name = @“Perfect”, 表示這個(gè)是一個(gè)靜態(tài)的常量,那么就是說他會(huì)在開機(jī)的時(shí)候初始化一次,而且是不可以改變的。注意:const 放在變量的前邊是修飾變量的,表示這個(gè)變量不可變,但是如果放在*前面或者static 后面,都表示修飾的是一個(gè)指針,那么表示這個(gè)指針地址不變,但是指針的內(nèi)容可以改變
Extern
1.what?
剛才講到的都是一些局部變量,也就是只能在這個(gè)類里邊使用,其他的類沒有辦法直接訪問這些變量的,extern 修飾的變量正是解決了這一個(gè)問題,他所修飾的變量可以全局訪問
2.why?
上邊的what里邊其實(shí)已經(jīng)解釋了,就是因?yàn)槲覀兿朐谶@個(gè)類之外,直接訪問這個(gè)變量
3.how?
可以直接使用 extern NSString *name = @“perfect” 表示一個(gè)全局變量
也可以配合const 使用 extern NSString * const name = @“perfect” 此時(shí)這個(gè)常量只被初始化一次,并且是全局變量