转载自: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]) ;
|