静态变量
静态变量也可以被称为内部全局变量,意思就是静态变量是在所定义的位置是全局的,但是不可以被其他文件访问。 静态变量定义语法
static type staticVar;
在定义变量的时候加关键字static就可以定义静态变量。
静态变量的使用
不像java中静态变量的使用是 类名.静态变量,oc中直接使用定义的静态变量即可,不需要加类名,因为静态变量根本不可能被其他类使用。
静态变量的特性:
- 静态变量的作用域是与它定义的位置有关系
* 定义在文件中它的作用域就是整个文件,并且是私有的,其他的类或其他的文件 是不可以访问该静态变量的 * 定义在方法内,它的作用域就是这方法,其他的方法是不可以访问该静态变量
- 静态变量只初始化一次(和java中是一样的)
- 类方法和实例方法甚至函数都可以使用静态变量
静态变量定义在源文件中(.m)
静态变量可以定义在方法或函数体外,也可以定义在方法(类方法和实例方法)或函数体内。
静态变量定义在方法或函数体外 该方式适用于当静态变量会被本文件内的多个函数使用的情况,最好能把静态变量定义统一放在源文件的起始处(@implementation的外面),这样有利于代码维护和可读性,比如:
//Vars.m 文件
//定义2个静态变量
static int count;
static int a;
@implementation ClassName
@end
该方式下,定义的静态变量的作用域就是本文件,并且是私有的,只初始化一次。
静态变量定义在方法(类方法和实例方法)或函数体内 该方式适用于一个方法或函数不管调用多少次,它们都共享一个变量的情况。看个例子:
//实例方法中定义静态变量
-(void) counter{
//不管counter方法被调用几次,count的值一直在+1
static int count = 0;
count++;
}
//类方法中定义静态变量
+(void) print{
static int a = 0;
a++;
}
该方式下的定义的静态变量作用域就是它所在的方法或函数内,并且初始化一次
让静态变量变为外部全局的
因为静态变量具有私有的特性,它只在定义它的源文件内可以被访问,若想在其他文件中也可以访问静态变量可以用下面的方法:
定义获取静态变量的类方法 其他类可以使用该类方法来获取静态变量 如下面例子:
@interface ClassName:NSObject
+(int) getCount;//声明获取静态变量count的类方法
@end
static int count = 0;//定义静态变量count,并初始化为0
@implementation ClassName
+(int) getCount{
return count;
}
@end
//使用
[ClassName getCount];
小结
- 静态变量是类似于java中类变量的一种变量
- 在定义变量前面加static可以定义静态变量
- 静态变量的作用域是它定义所处的位置
- 在源文件中定义静态变量
- 怎么让静态变量变为外部全局的