OC笔记 - 静态变量和全局变量的区别

全局变量 | 全局静态变量

1 - 若程序由一个源文件构成时,全局变量与全局静态变量没有区别

2 - 若程序由多个源文件构成时,全局变量与全局静态变量不同

① 全局静态变量是定义该变量的源文件所独享,就是说全局静态变量对组成该程序的其它源文件是无效的

② 全局变量可以在所有源文件里调用,除了本文件,其它文件可以通过 extern 的方式引用

3 - 静态全局变量的作用

① 不必担心其它源文件使用相同变量名,彼此相互独立

② 在某源文件中定义的静态全局变量不能被它它源文件使用或修改

③ 只能在本文件中使用,不允许在其它文件里调用

4 - 代码示例:在 TestDemo.m 文件里分别声明全局变量 | 全局静态变量,在 main.m 文件中进行验证

// - TestDemo.m

1 #import "TestDemo.h"
2 // 声明一个全局变量
3 NSInteger cellWidth = 100;
4 
5 // 声明一个静态全局变量
6 static NSInteger cellHeight = 200;
7 @implementation TestDemo
8 
9 @end

// - main.m

 1 #import <Foundation/Foundation.h>
 2 //----------------------------全局变量
 3 //// 声明相同的全局变量
 4 //NSInteger cellWidth; // 编译报错:同一个工程中,两个不同 .m 文件中同样的全局变量不能同时存在
 5 
 6 // 解决办法:使用 extern 关键字
 7 //extern NSInteger cellWidth = 200; // 编译报错:不能再次初始化
 8 extern NSInteger cellWidth;
 9 
10 //----------------------------静态全局变量
11 //extern NSInteger cellHeight; // 编译报错:静态全局变量只能在本文件中使用,不允许其他文件的调用
12 
13 static NSInteger cellHeight = 500; // 可以在两个不同的 .m 文件中定义同样的静态全局变量,而互不干涉、互不影响
14 
15 
16 int main(int argc, const char * argv[]) {
17     @autoreleasepool {
18         
19         NSLog(@"全局变量 %ld",(long)cellWidth); // 输出 100
20         NSLog(@"全局静态变量 %ld",(long)cellHeight); // 输出 500
21 
22     }
23     return 0;
24 }

 

上一篇:OC面试题 - block相关汇总


下一篇:拼多多开车怎么出自然流量-拼多多出评助手