const
- const用來(lái)修飾右邊的基本變量或指針變量
- 被修飾的變量只讀仍翰,不能被修改
/** 可以改變指針的指向 但是不能改變指針指向的內(nèi)容 不能改變值*/
NSString * const kHomeBottomTitle1 = @"kHomeBottomTitle1";
/** 可以改變指針指向的內(nèi)容 但是不能改變指針的指向 值可變*/
const NSString * kHomeBottomTitle2 = @"kHomeBottomTitle2";
/** 指針的指向 指針指向的內(nèi)容都不可改變 不能改變值*/
const NSString * const kHomeBottomTitle3 = @"kHomeBottomTitle3";
static
- 修飾局部變量
在方法體內(nèi),聲明為靜態(tài)的變量(局部靜態(tài)變量)观话。保證局部變量永遠(yuǎn)只初始化一次予借,在程序的運(yùn)行過(guò)程中永遠(yuǎn)只有一份內(nèi)存,生命周期類(lèi)似全局變量了匪燕,但是作用域不變蕾羊。
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
//聲明一個(gè)局部變量i
static int i = 0; //每次點(diǎn)擊view來(lái)到這個(gè)方法時(shí)讓i自增
i ++; //打印結(jié)果
NSLog(@"i=%d",i);
}
//i每次都會(huì)遞增喧笔,因?yàn)橹怀跏蓟淮?
- 修飾全局變量
在源文件內(nèi)(但在方法體外)帽驯,全局靜態(tài)變量。變量的內(nèi)存只被分配一次书闸,使全局變量的作用域僅限于當(dāng)前文件內(nèi)部尼变,即當(dāng)前文件內(nèi)部才能訪問(wèn)該全局變量。從面向?qū)ο蟮慕嵌瘸霭l(fā),當(dāng)需要一個(gè)數(shù)據(jù)對(duì)象為整類(lèi)而非某個(gè)對(duì)象服務(wù)嫌术,同時(shí)有力求不破壞類(lèi)的封裝性哀澈,既要求此成員隱藏在類(lèi)的內(nèi)部,又要求對(duì)外不可見(jiàn)的時(shí)候度气,就可以使用static割按。
@implementation LoginTool
//static修飾全局變量,讓外界文件無(wú)法訪問(wèn)
static LoginTool *_sharedManager = nil;
+ (LoginTool *)sharedManager {
static dispatch_once_t oncePredicate;
dispatch_once(&oncePredicate, ^{
_sharedManager = [[self alloc] init];
});
return _sharedManager;
}
- 修飾函數(shù)(很少用到)
static修飾函數(shù)時(shí)磷籍,被修飾的函數(shù)被稱為靜態(tài)函數(shù)适荣,使得外部文件無(wú)法訪問(wèn)這個(gè)函數(shù),僅本文件可以訪問(wèn)院领。
extern
- 聲明外部全局變量弛矛。這里需要特別注意extern只能聲明,不能用于實(shí)現(xiàn)比然。且僅僅是暗示這個(gè)變量可能是在別的源文件中定義過(guò)的丈氓,沒(méi)有其他作用。
h中聲明
extern NSString * const kHomeBottomTitle1;
.m中定義
NSString * const kHomeBottomTitle1 = @"kHomeBottomTitle1";
注意:不可直接在.h文件中直接定義變量即:
extern NSString * const kHomeBottomTitle1 = @"kHomeBottomTitle1";
因?yàn)槿绻?h里面定義强法,當(dāng)全局變量被多個(gè)文件使用時(shí)万俗,需要多次包含.h頭文件,這樣會(huì)導(dǎo)致重復(fù)定義這個(gè)全局變量