静态变量

静态变量也可以被称为内部全局变量,意思就是静态变量是在所定义的位置是全局的,但是不可以被其他文件访问。 静态变量定义语法

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可以定义静态变量
  • 静态变量的作用域是它定义所处的位置
  • 在源文件中定义静态变量
  • 怎么让静态变量变为外部全局的

results matching ""

    No results matching ""