全局变量、静态变量的定义和使用
- 明确两者都是在源文件中定义和使用!
1、全局变量
例如在文件开头(源文件中的任意函数或方法外)定义一个变量:
int num = 0;
需要在不同文件中使用,则可以在使用文件中声明这个全局变量:
extern int num;
最好是全局变量的定义和使用时声明分开,虽然下面的写法也不会出错:
extern int num = 0;
但编译器会提出警告,说全局变量的定义和声明混合。
需要注意的是,一个全局变量的使用方式:一次定义,多处声明使用。
虽然全局变量的使用违背了数据封装和面向对象编程技术的初衷,但有时的确需要在不同的文件中共享同一个变量。
2、静态变量static
在同一个文件中的不同函数或方法中共享变量:static variable。
声明为static:
static int num = 0;
类方法中不能访问实例变量(这时实例变量还没有被明确指向一个已分配空间),但它可以访问一些变量,比如在类的构造方法中统计已经生成的对象个数,就可以利用静态变量,在构造方法中访问它。
static int counter = 0; //定义静态变量counter
@implementation Person
extern int counter; //声明需要使用的静态变量
+(instancetype)person
{
++counter; //构造的对象个数 +1
return [Perosn alloc]; //可以只在构造方法中分配空间
}
+(int)count
{ //获取生成的对象个数
extern int counter;
return counter;
}
@end
- 要在哪个方法中使用,就在哪个方法中声明!
最好是不要覆盖alloc,这一层不是在OC中应该考虑的内容。