#### 总所周知static变量有三个作用
#### 修饰的局部变量(在方法里面的变量)
- 使得局部变量只初始化一次
- 局部变量在程序中只有一份内存,使这个变量拥有记忆功能(可以被赋值).
- 局部变量的作用域不变,但是生命周期变了(直到程序结束才销毁)
#### 修饰的全局变量
- 拥有局部变量修饰时候的属性,不同的是该静态变量只能被本文件访问(作用域在本文件).
局部变量的代码验证可以参考这篇文章https://blog.csdn.net/shenyongjun1209/article/details/78753711
这里我验证一下修饰全局变量的作用域范围
这是一个TestViewController的.m文件
```
#import "TestViewController.h"
static NSString *name;
NSString *age;
@interface TestViewController ()
@end
@implementation TestViewController
@end
在自带ViewController.m文件导入TestViewController.h后通过extern取得文件的name和age
#import "ViewController.h"
#import "TestViewController.h"
extern NSString *name;
extern int age;
@interface ViewController ()
@end
在viewDidLoad方法里面尝试拿到name和age
@implement ViewController()
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"%@",name);
NSLog(@"%d",age);
}
@end
```
报错找不到_name这个symbols属性,把 NSLog(@"%@",name);注销掉demo才可以运行
说明static修饰的全局变量只能被本文件使用,而没有被static修饰的age则可以导入该文件头文件后的任意文件使用。