static的作用:
1.修饰局部变量
- 让局部变量只初始化一次
- 局部变量在程序中只有一份内存
- 并不会改变局部变量的作用域,仅仅是改变了局部变量的生命周期(只到程序结束,这个局部变量才会销毁)
//当a不用static修饰时 - (void) test { int a = 0; a ++; NSLog(@"a====%d",a); } [self test]; // a === 1 //当a用static修饰时 - (void) test { static int a = 0; a ++; NSLog(@"a====%d",a); } [self test]; // a === 3
2.修饰全局变量
- 全局变量的作用域仅限于当前文件
//默认情况下全局变量的作用范围为全局的文件 1. 当在 A.m 中定义全局变量 int age = 30;若在 B.m 中也定义全局变量 int age = 10,编译后会报错,提示重复定义 age 属性。 2.若在 A.m 中定义全局变量 int age = 30,在C.m文件中可以访问到,通过 `extern int age` 可以访问到全局变量 age 的值,这样就可以在其他文件中改变age的值,就缺乏安全性。(extern 关键字不会分配新的内存,只是引用,引用顺序是先检查本文件中的属性(age),然后再从其他文件中查找,只要找到就返回) 3.若全局变量前加 `static`修饰后,如`static int age = 20` 就可以改变age的作用范围,表示age只能在在当前文件中可以访问,其他文件中不可以访问,可以增加安全性。
- 全局变量的作用域仅限于当前文件