在Objective-C中,在变量声明前加上关键字static,该变量就成为静态变量。静态变量的作用可以使局部变量保留多次调用同一个方法所取得的值。静态变量只在程序开始执行时初始化一次,在不指定静态变量的值时,默认情况下,静态变量的初始值为0,并且多次调用方法时,保存这些数值。
1、在方法之内定义静态变量
可以在方法中定义静态变量,此时,只能在该方法中使用定义的静态变量。
如下所示的方法中,静态变量staticValue只能在printStaticVariable中使用,并且staticValue的初始值为0。
-(void)printStaticVariable{
staticintstaticValue;
NSLog(@"staticVar Value: %d",staticValue);
staticValue++;
}
当在main()中多次调用printStaticVariable方法时,staticValue的值会累加。如下所示:
#import
#import "MyClass.h"
intmain(intargc,constchar*argv[]){
@autoreleasepool{
MyClass*myClass=[[MyClassalloc]init];
[myClass printStaticVariable];
[myClass printStaticVariable];
[myClass printStaticVariable];
}
return0;
}
运行结果如下:
2、在方法之外定义静态变量
可以在方法之外定义静态变量,此时,该类的所有方法都可以访问该静态变量。
如下所示,在@implementation之外定义一个静态变量staticValue2,并赋初始值100。在该类的printAndIncreaseStaticValue方法中,打印当前staticValue2的值,并且对staticValue2执行加1操作。
#import "MyClass.h"
staticintstaticValue2=100;
@interfaceMyClass()
@end
@implementationMyClass
-(void)printAndIncreaseStaticVarValue{
NSLog(@"staticVar Value: %d",staticValue2);
staticValue2++;
}
@end
在main()函数中,多次调用printAndIncreaseStaticVarValue方法;
#import
#import "MyClass.h"
intmain(intargc,constchar*argv[]){
@autoreleasepool{
MyClass*myClass=[[MyClassalloc]init];
[myClass printAndIncreaseStaticVarValue];
[myClass printAndIncreaseStaticVarValue];
[myClass printAndIncreaseStaticVarValue];
}
return0;
}
运行结果如下:
3、静态变量的重要特性
静态变量在开发中有2个重要特性需要注意:
某个对象调用不同的方法,修改同一个静态变量,则该静态变量的值是累加的;
当同一个类的不同对象,修改同一个静态变量时,则该静态变量的值也是累加的。
示例代码:
在main()函数中,再创建一个MyClass对象,并调用printAndIncreaseStaticVarValue方法,可以验证,此时静态变量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;
}
运行结果: