關(guān)鍵字const/static/extern/typedef/typeof/define的釋義和用法

1跟匆、const(常量---readonly)

作用:
  • 用于修飾 右邊 的基本變量或指針變量异袄;
  • 被修飾的變量只讀,不能被修改(readonly);
定義的意義:

(1.) 常用使用方式:

  • 常用單獨(dú)使用形式有三種:(但是一般會(huì)和其他關(guān)鍵字聯(lián)合使用)
const NSString * name = @"jack";
NSString const * sax = @"boy";
NSString * const age = @"24";

這樣定義的均為全局常量:不管你定義在那個(gè)文件夾(單獨(dú)定義現(xiàn)在只能存在于.m文件中玛臂,見:用法舉例->PS)烤蜕,在外部的任意文件中都可以訪問到。

  • 和其他關(guān)鍵字結(jié)合使用的形式一般有兩種:
extern const NSString * name; // 僅做聲明使用垢揩,一般存在與.h文件中
static const NSString * name = @"jack"; // 使全局常量變?yōu)榫植孔兞烤谅蹋唧w使用后面會(huì)介紹??

(2.)const究竟做了什么?
在介紹const時(shí)著重強(qiáng)調(diào)了“右邊”二字叁巨,這是有原因的O(∩_∩)O~
在使用時(shí)我們發(fā)現(xiàn)const 修飾時(shí) 位置是不一樣的斑匪,不同位置分別代表了什么含義呢?

const NSString * name = @"jack";
// *name 不能修改  name 可以修改  ---> *name 是指向指針的指針~
NSString const * sax = @"boy";
// 與上面一樣(這就是為什么強(qiáng)調(diào)“右邊”二字了)
NSString * const age = @"24";
// *name 能修改  name 不可以修改  --->所以我們想定義一個(gè)不想被修改的常量應(yīng)該這樣

我們可以用指針變量來驗(yàn)證一下:


1-1-驗(yàn)證
用法舉例:

訪問的方式一般有兩種:
(1.)在.m文件中定義锋勺,在其他文件中獲取其聲明蚀瘸,然后使用;


1-1-定義
1-1-使用

(2.)另一種使用時(shí)需要先在.h中聲明庶橱,然后.m中賦值贮勃,當(dāng)要使用該常量時(shí)需要導(dǎo)入定義該常量的頭文件,然后直接使用即可苏章。

1-1-聲明
1-1-定義
1-1-使用

PS:現(xiàn)在不能直接在.h文件中定義常量了寂嘉,會(huì)發(fā)生循環(huán)引用問題。具體見http://www.reibang.com/p/94ca52399ade該篇文章的第十五小標(biāo)題枫绅,所以現(xiàn)在常用方法是單獨(dú)創(chuàng)建一個(gè)專門存放常量的文件泉孩,使用第二種方法定義常量,然后在pch文件中導(dǎo)入該文件的頭文件并淋。

2寓搬、static (靜態(tài)的)

作用:修飾不同的變量作用不盡相同。

(1.)修飾全局變量:

static NSString * name_boy = @"Bob";
// 下面是與const結(jié)合使用的情況
static const NSString * name = @"jack";
static NSString const * sax = @"boy";
static NSString * const age = @"24";

這又分為兩種:

---》在.h中修飾全局變量:

現(xiàn)在直接在.h文件中定義全局變量或者const修飾的全局變量運(yùn)行時(shí)會(huì)直接報(bào)_x86的錯(cuò)誤县耽,但是可以使用static 修飾句喷,即可在.h文件中定義镣典,然后在其他文件中可以直接使用!

2-1-定義
2-1-使用
---》在.m中修飾全局變量:

改變?nèi)肿兞康淖饔糜蛲偾恚谷肿兞康淖饔糜騼H限于當(dāng)前文件內(nèi)部(.m內(nèi)部)兄春,即當(dāng)前文件內(nèi)部才能訪問該全局變量。同時(shí)這樣能夠避免重復(fù)定義全局變量锡溯!常見的使用情況:單例中神郊。

若將上圖(2-1-定義)中static const NSString * name = @"jack";放到.m文件中則在AppDelegate.m中則訪問不到name.

2-1-驗(yàn)證

(2.)修飾局部變量:
---》改變局部變量的生命周期(只到程序結(jié)束,這個(gè)局部變量才會(huì)銷毀)不會(huì)改變局部變量的作用域趾唱;
---》讓局部變量只初始化一次涌乳,局部變量在程序中只有一份內(nèi)存

下面有一組對比來說明修飾局部變量后的變化:

正常情況下,未被static修飾的局部變量
使用static修飾的局部變量

可以看到甜癞,經(jīng)過static修飾后夕晓,在for循環(huán)內(nèi)部workDays只被初始化了一次。

與const結(jié)合使用:

一般是在.m文件中定義經(jīng)常使用的字符串常量悠咱,或者數(shù)值常量時(shí)使用蒸辆。static將一個(gè)全局變量變成局部變量,然后const將一個(gè)局部變量變成局部常量

e.g : MBProgressHUD.m中


3、extern(外部的析既,外部變量)

作用:
  • 用來聲明全局變量躬贡;
  • 只是用來獲取全局變量(包括全局靜態(tài)變量)的值,不能用于定義變量眼坏;
用法:
  • 在.h中修飾聲明全局變量拂玻,然后在.m中定義該全局變量,則在其他文件中可以直接使用該變量宰译!
3-1-聲明
3-2-定義
3-3-使用
  • 獲取全局變量的值(具體用法參考本篇文章中const篇幅中 -> 用法舉例 中的(1.)檐蚜;
與const結(jié)合使用:

即,在.h中聲明一個(gè)const修飾的全局變量沿侈,讓后再在.m中實(shí)現(xiàn)其定義闯第。(這樣逼格看起來要高一些,其實(shí)就是定義了一個(gè)全局變量~

在這里還有一些關(guān)鍵字UIKIT_EXTERN缀拭、OBJC_EXTERN咳短、FOUNDATION_EXTERN丘侠、FOUNDATION_EXPORT隶症、FOUNDATION_IMPORT,這些均為經(jīng)過處理的extern.

  • UIKIT_EXTERN:將函數(shù)/變量修飾為兼容以C編譯方式的、具有extern屬性的屬性伸眶。
  • OBJC_EXTERN:與UIKIT_EXTERN差不多铣鹏,但是比其更加寬泛一些敷扫。
  • FOUNDATION_EXTERN:看其定義是與OBJC_EXTERN一毛一樣的······
  • FOUNDATION_EXPORT/FOUNDATION_IMPORT:用來兼容win32應(yīng)用程序,同時(shí)也是為了兼容C++語言的~~(不明覺厲??)

若是使用以上字段是不是看起來逼格又高了一點(diǎn)~~哀蘑,不過通常使用最多的也就是 UIKIT_EXTERN了诚卸。

4葵第、typedef(定義類型)

作用:定義類型的別名。

(1.)定義枚舉:

typedef NS_ENUM(NSInteger, UITableViewStyle) {
    UITableViewStylePlain,          
    UITableViewStyleGrouped      
};

typedef NS_OPTIONS(NSUInteger, UISwipeGestureRecognizerDirection) {
    UISwipeGestureRecognizerDirectionRight = 1 << 0,
    UISwipeGestureRecognizerDirectionLeft  = 1 << 1,
    UISwipeGestureRecognizerDirectionUp    = 1 << 2,
    UISwipeGestureRecognizerDirectionDown  = 1 << 3
};
//凡是需要以按位或操作來組合的枚舉都應(yīng)使用NS_OPTIONS定義合溺。若是枚舉不需要互相組合卒密,則應(yīng)使用NS_ENUM來定義

(2.)定義block:

typedef void (^JRNetWorkSuccessBlock)(id responseObject, MBProgressHUD * hud);

(3.)添加別名:

typedef NSString Str;
// 這樣再定義string類型時(shí),也可以直接使 Str
// e.g  @property (copy, nonatomic) Str * name;

5棠赛、typeof(變量名哮奇,類型)

作用:靜態(tài)獲取參數(shù)類型。

最常見就是自定義block中防止循環(huán)引用:

__weak typeof(self)weakSelf = self;
self.channelHeaderView.addAction = ^{
   [[UIApplication sharedApplication].keyWindow addSubview:weakSelf.channelView];
};

6睛约、define(定義)

作用:主要是用于定義宏

關(guān)于宏定義可以看一下我的這篇文章 《iOS預(yù)編譯指令詳解》鼎俘。對于經(jīng)常使用的一些常量最好使用const而不是定義成宏。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辩涝,一起剝皮案震驚了整個(gè)濱河市贸伐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌怔揩,老刑警劉巖捉邢,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異商膊,居然都是意外死亡伏伐,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門晕拆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來藐翎,“玉大人,你說我怎么就攤上這事实幕≮甯撸” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵茬缩,是天一觀的道長赤惊。 經(jīng)常有香客問我,道長凰锡,這世上最難降的妖魔是什么未舟? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮掂为,結(jié)果婚禮上裕膀,老公的妹妹穿的比我還像新娘。我一直安慰自己勇哗,他們只是感情好昼扛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般抄谐。 火紅的嫁衣襯著肌膚如雪渺鹦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天蛹含,我揣著相機(jī)與錄音毅厚,去河邊找鬼。 笑死浦箱,一個(gè)胖子當(dāng)著我的面吹牛吸耿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播酷窥,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼咽安,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蓬推?” 一聲冷哼從身側(cè)響起板乙,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拳氢,沒想到半個(gè)月后募逞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡馋评,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年放接,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片留特。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡纠脾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蜕青,到底是詐尸還是另有隱情苟蹈,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布右核,位于F島的核電站慧脱,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏贺喝。R本人自食惡果不足惜菱鸥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望躏鱼。 院中可真熱鬧氮采,春花似錦、人聲如沸染苛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至躯概,卻和暖如春登钥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背楞陷。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留茉唉,地道東北人固蛾。 一個(gè)月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像度陆,于是被迫代替她去往敵國和親艾凯。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容