OC语言 - 静态变量 | 全局变量

全局变量 | 全局静态变量(也叫做静态全局变量)

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

① 全局静态变量是由定义该变量的源文件所独享,就是说全局静态变量对组成该程序的其他源文件是无效的。不必担心和其他源文件使用相同变量名,彼此相互独立,它不能被其他源文件使用或修改

② 全局变量可以在所有源文件里调用:其他文件可以通过 extern 的方式引用

3 - 代码示例:在 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; // 编译报错
5 6 // 解决办法:使用 extern 关键字 7 extern NSInteger cellWidth = 200; // 编译报错:不能再次初始化 8 extern NSInteger cellWidth; // 正确 9 10 // ----------------------------静态全局变量 11 extern NSInteger cellHeight; // 编译报错:静态全局变量只能在本文件中使用,不允许其他文件引用 12 13 static NSInteger cellHeight = 500; // 正确:可以在两个不同的源文件中定义同名静态全局变量、且能够重新赋值!因为它们互不干涉、互不影响 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 }
复制代码

 

posted on   低头捡石頭  阅读(719)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示