OC中的全局变量 与 static

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



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值