static:
作用於變量:
1.作用於局部變量,改變其存儲方式(生命週期),變爲靜態的局部變量,編譯時分配內存,程序退出時釋放存儲單元,作用域不變;
2.作用於外部變量,外部變量本身就是缺省的靜態變量,作用域很廣,整個文件都有效甚至別的文件都可以引用,static只會改變其連接方式,變爲只有本文件內有效。
作用於函數:
使用static用於函數定義時,對函數的連接方式產生影響,使得函數只在本文件內部有效,對其他文件是不可見的。這樣的函數又叫作靜態函數。使用靜態函數的好處是,不用擔心與其他文件的同名函數產生干擾,另外也是對函數本身的一種保護機制。
const:
作用:
1.修飾右邊的基本變量和指針變量;
2.它的含義是:const修飾的變量值是不可變的,readonly。
使用場景:
1. 修飾全局變量來代替宏
2、修飾方法的參數
const和宏的區別:
1. 編譯時刻:const是編譯期,宏是預編譯期;
2. 編譯檢查:const有檢查會報編譯錯誤,宏沒有;
3. 宏能定義函數,方法,const不能;
4. 大量使用宏會導致預編譯時間過長;
extern:
extern作用:
只是用來獲取全局變量(包括全局靜態變量)的值,不能用於定義變量
extern工作原理:
先在當前文件查找有沒有全局變量,沒有找到,纔會去其他文件查找。
開發中的常用場景:
1、定義一個只能在當前文件訪問的全局常量
static 類型 const 常量名 = 初始化值
例:static NSString * const cell = @"ABC";
2、在多個文件中經常使用的同一個字符串常量,可以使用extern與const組合。
全局常量正規寫法:開發中便於管理所有的全局變量,通常搞一個GlobeConst文件,裏面專門定義全局變量,統一管理
GlobeConst.h 文件進行聲明:
extern NSString * const nameKey;
GlobeConst.m 文件進行定義:
NSString * const nameKey = @"name";