在Objective-C中蜈膨,在變量聲明前加上關(guān)鍵字static卫键,該變量就成為靜態(tài)變量潜慎。靜態(tài)變量的作用可以使局部變量保留多次調(diào)用同一個(gè)方法所取得的值抹剩。靜態(tài)變量只在程序開(kāi)始執(zhí)行時(shí)初始化一次,在不指定靜態(tài)變量的值時(shí)绪励,默認(rèn)情況下肿孵,靜態(tài)變量的初始值為0,并且多次調(diào)用方法時(shí)疏魏,保存這些數(shù)值停做。
1、在方法之內(nèi)定義靜態(tài)變量
可以在方法中定義靜態(tài)變量蠢护,此時(shí)雅宾,只能在該方法中使用定義的靜態(tài)變量。
如下所示的方法中,靜態(tài)變量staticValue只能在printStaticVariable中使用眉抬,并且staticValue的初始值為0贯吓。
-(void)printStaticVariable{
staticintstaticValue;
NSLog(@"staticVar Value: %d",staticValue);
staticValue++;
}
當(dāng)在main()中多次調(diào)用printStaticVariable方法時(shí),staticValue的值會(huì)累加蜀变。如下所示:
#import
#import "MyClass.h"
intmain(intargc,constchar*argv[]){
@autoreleasepool{
MyClass*myClass=[[MyClassalloc]init];
[myClass printStaticVariable];
[myClass printStaticVariable];
[myClass printStaticVariable];
}
return0;
}
運(yùn)行結(jié)果如下:
2悄谐、在方法之外定義靜態(tài)變量
可以在方法之外定義靜態(tài)變量,此時(shí)库北,該類的所有方法都可以訪問(wèn)該靜態(tài)變量爬舰。
如下所示,在@implementation之外定義一個(gè)靜態(tài)變量staticValue2寒瓦,并賦初始值100情屹。在該類的printAndIncreaseStaticValue方法中,打印當(dāng)前staticValue2的值杂腰,并且對(duì)staticValue2執(zhí)行加1操作垃你。
#import "MyClass.h"
staticintstaticValue2=100;
@interfaceMyClass()
@end
@implementationMyClass
-(void)printAndIncreaseStaticVarValue{
NSLog(@"staticVar Value: %d",staticValue2);
staticValue2++;
}
@end
在main()函數(shù)中,多次調(diào)用printAndIncreaseStaticVarValue方法喂很;
#import
#import "MyClass.h"
intmain(intargc,constchar*argv[]){
@autoreleasepool{
MyClass*myClass=[[MyClassalloc]init];
[myClass printAndIncreaseStaticVarValue];
[myClass printAndIncreaseStaticVarValue];
[myClass printAndIncreaseStaticVarValue];
}
return0;
}
運(yùn)行結(jié)果如下:
3惜颇、靜態(tài)變量的重要特性
靜態(tài)變量在開(kāi)發(fā)中有2個(gè)重要特性需要注意:
某個(gè)對(duì)象調(diào)用不同的方法,修改同一個(gè)靜態(tài)變量少辣,則該靜態(tài)變量的值是累加的凌摄;
當(dāng)同一個(gè)類的不同對(duì)象,修改同一個(gè)靜態(tài)變量時(shí)漓帅,則該靜態(tài)變量的值也是累加的锨亏。
示例代碼:
在main()函數(shù)中,再創(chuàng)建一個(gè)MyClass對(duì)象煎殷,并調(diào)用printAndIncreaseStaticVarValue方法屯伞,可以驗(yàn)證,此時(shí)靜態(tài)變量staticValue2的值也是疊加的豪直。
#import
#import "MyClass.h"
intmain(intargc,constchar*argv[]){
@autoreleasepool{
MyClass*myClass=[[MyClassalloc]init];
[myClass printAndIncreaseStaticVarValue];
[myClass printAndIncreaseStaticVarValue];
[myClass printAndIncreaseStaticVarValue];
MyClass*myclass1=[[MyClassalloc]init];
[myclass1 printAndIncreaseStaticVarValue];
[myclass1 printAndIncreaseStaticVarValue];
[myclass1 printAndIncreaseStaticVarValue];
}
return0;
}
運(yùn)行結(jié)果: