由於前一篇使用了const
与extern
,但对这两者还不太了解,於是又去看了其他人的文章,试图弄懂一点,就有了这篇~
主要作用:
let
下面举个简单例子:
//定义一个类型为int的变数a,初始值为10,const用来修饰a,因此a只可读,不可修改
int const a = 10;
a = 20; // error
const int a = 10; //跟前者等价
再来透过 *p 和 p 来理解 const 的用法:
int const *p // *p只可读 ; p变数
int * const p // *p变数 ; p只可读
const int * const p // p和*p都只可读
int const * const p // p和*p都只可读
先来看个简单的小例子:
-(void) noStatic {
int a = 0;
a++;
NSLog(@"a = %d",a);
}
然後 viewDidLoad 执行5次
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
[self noStatic];
[self noStatic];
[self noStatic];
[self noStatic];
[self noStatic];
}
结果:
2021-09-17 11:02:30.057137+0800 TestOC[71225:1637744] a = 1
2021-09-17 11:02:30.057301+0800 TestOC[71225:1637744] a = 1
2021-09-17 11:02:30.057429+0800 TestOC[71225:1637744] a = 1
2021-09-17 11:02:30.057541+0800 TestOC[71225:1637744] a = 1
2021-09-17 11:02:30.057633+0800 TestOC[71225:1637744] a = 1
可以发现到每次执行 noStatic 时,a 都是全新的变数,系统分配不同的记忆体位址给 a,因此 a 都是 1。
那如果加上 static 呢?
-(void) haveStatic {
static int a = 0;
a++;
NSLog(@"a = %d",a);
}
@end
一样执行 5 次,来看结果
2021-09-17 11:07:10.027838+0800 TestOC[71247:1640410] a = 1
2021-09-17 11:07:10.027932+0800 TestOC[71247:1640410] a = 2
2021-09-17 11:07:10.027995+0800 TestOC[71247:1640410] a = 3
2021-09-17 11:07:10.028055+0800 TestOC[71247:1640410] a = 4
2021-09-17 11:07:10.028122+0800 TestOC[71247:1640410] a = 5
a值改变了,也意味着每次对 a 变数做存取时,系统都在同一个的记忆体位址做操作,因此 a 值才会越来越多。同时也代表 a 只初始化一次,一份记忆体位置。
主要作用是宣告外部全域性变数,注意!extern 只能宣告,不能用於实现。
在开发中,常单独使用一个类来管理全域变数或常量。
我们可以在.h档
中 extern宣告全域变数
//宣告全域变数
extern NSString * const name;
extern NSInteger const count;
然後在 .m档
中去实现
#import <Foundation/Foundation.h>
//实现
NSString * const name = @"tom";
NSInteger const count = 3;
这样只要汇入标头档案,就可以使用全域变数。
http://xcodertw.blogspot.com/2013/08/objective-c-static.html
https://codertw.com/ios/326890/
>>: 【Day02-尺度】40°C为什麽不是20°C的两倍?
monotonic :单调,递增或递减 这是一个看起来很简单的资料结构, 拥有 O(N) time ...
先丢github连结!晚点再补内容呜呜呜 居然还有300字以上的限制XDD ProfileViewC...
什麽是依赖注入 在说明什麽是 Dependency Injection(DI, 依赖注入)前,要先来...
Keyword: KMM shared module, Expect/Actual 今天我们来看看范...
1.前端的建立过程(上): 我是在本机电脑运行起来本地版本 Container 的静态前端 Serv...