const
限制類型:僅僅用來修飾右邊的變量(基本數(shù)據(jù)變量搔课,指針變量)
被const修飾的變量只讀胰柑。
-(void)func{
const NSInteger variable = 10;
NSInteger const variable = 10;
variable = 15;//報錯,不可修改
}
//value 不可被修改
-(void)func:(NSInteger const)value {
}
和define 的區(qū)別
- 宏:預(yù)編譯 辣辫,const:編譯
- 宏沒有編譯檢查,不會報編譯錯誤旦事,只是替換;const有編譯檢查急灭,會報編譯錯誤
- 宏的好處 宏能定義一些函數(shù)姐浮,方法,但是const不可以
- 宏的壞處 大量使用宏,會導(dǎo)致預(yù)編譯時間過長。
static
- 修飾局部變量:
局部變量只會生成一份內(nèi)存,只會初始化一次葬馋。
改變局部變量的作用域卖鲤。
延長局部變量的生命周期,程序結(jié)束才會銷毀。
- 修飾全局變量:
避免重復(fù)定義全局變量畴嘶。
只能在本文件中訪問,修改全局變量的作用域,生命周期不會改蛋逾。
調(diào)用兩次func以后,打印結(jié)果:variable = 1窗悯、variable = 2
-(void)func{
static NSInteger variable = 0;
variable++;
NSLog(@"variable = %ld",(long)variable);
}
extern
功能:只是用來獲取全局變量(包括全局靜態(tài)變量)的值区匣,不能用于定義變量
工作原理:先在當(dāng)前文件查找有沒有全局變量,沒有找到蒋院,才會去其他文件查找亏钩。
static、const
聲明一個靜態(tài)的全局只讀常量欺旧。
場景:在一個文件中
經(jīng)常使用的字符串常量姑丑,可以使用static與const組合
static NSString * const staticConstValue = @"value";
extern、const
在多個文件中經(jīng)常使用的同一個字符串常量辞友,可以使用extern與const組合栅哀。
開發(fā)時有個規(guī)定震肮,為了避免重復(fù)報錯,全局變量不能定義在自己的類中留拾,我們需要自己創(chuàng)建一個全局文件管理全局東西戳晌。
//.h文件中
extern NSString * const externConstValue;
//.m文件中
NSString const * externConstValue = @"value";