转载自:http://malongs.com/post/34.html
在日常的程序开发中我们常常需要让某些变量贯穿整个程序全局,比如要记录用户点击所有按钮总共多少次,这个时候怎么办?我们可以使用OC中得全局变量。
其实定义全局变量非常简单,一般情况下只要在程序开始处定义一个变量,该变量的变量名规范以"g"打头,表明是全局变量。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
// 定义一个全局变量和普通变量没有特别大得区别 int gClickCount = 0; int main( int argc, const char * argv[]) { @autoreleasepool { } return 0; } |
在我们需要使用到全局变量的时候,使用"extern" 来连接全局变量即可,比如下面我们在Person的初始化方法中使用全局变量gClickCount.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
// 初始化方法 -(id) init{ self = [super init] ; if (self){ // 将Age 定义为14 age = 14 ; // 连接全局变量 extern int gClickCount; gClickCount = 29; } return self ; } |
在main方法中,我们调用Person类的初始化方法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
int gClickCount = 0; int main( int argc, const char * argv[]) { @autoreleasepool { [[Person alloc]init]; // 输出的结果不是0 // 输出29 NSLog(@ "%i" ,gClickCount) ; } return 0; } |
是不是非常简单,但是使用extern也是具有弊端的,其弊端在于extern连接的变量任何类都可以访问,假如我们想要一个变量只给一个类作为全局变量,换种说法,这个全局变量只能给某个类的所有对象所使用,这个时候怎么办那?
其实解决办法我们之前已经说过了,我们可以使用static变量。
比如想要知道一个类被初始化了几次我们可以使用static变量来记录。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
// Person 类的头文件 #import <Foundation/Foundation.h> // 定义静态变量 static int gInitCount ; @interface Person : NSObject -(id) init ; // 获得初始化数量 +( int ) getInitCount ; @end |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
// Person 类的实现部分 #import "Person.h" @implementation Person // 初始化方法 -(id) init{ self = [super init] ; if (self){ // 初始化一次就累加初始化计数器变量 gInitCount ++ ; } return self ; } +( int ) getInitCount { return gInitCount ; } @end |
在main方法中测试static变量。
1
2
3
4
5
6
7
8
9
|
Person *p = [[Person alloc]init]; [p init]; // 输出2 NSLog(@ "%i" ,[Person getInitCount]) ; |