extern:
- 只是用来获取
全局变量
(包括全局静态变量)的值,不能用于定义变量 - 先在当前文件查找有没有全局变量,没有找到,才会去其他文件查找。
如果在A.m中定义一个变量如下:
#import "A.h"
NSString *PropertyTypeInt = @"i";
NSString *PropertyTypeFloat = @"f";
而在另外一个类实现B.m中需要使用PropertyTypeInt
或PropertyTypeFloat
,只需在B.m中这样实现:
#import "B.h"
extern NSString* PropertyTypeInt;
extern NSString* PropertyTypeFloat;
这时你会发现打印PropertyTypeInt
或PropertyTypeFloat
,是i
或f
static:
1.两个.m文件中同样的全局变量:
同一个工程中,两个不同 .m 文件中同样的全局变量不能同时存在
2.静态全局变量 :
因为在Person中agee是一个
静态全局变量
,尽管在ViewController使用了关键字extern想使用它,但还是不行的,静态全局变量只能在本文件中使用,不允许其他文件的调用!
const:
- const一般用来定义一个常量, 既然叫做常量, 即以后再也不能修改其值.
2.const仅仅用来修饰右边的变量(基本数据变量p,指针变量*p)
static与const联合使用
- static与const作用:声明一个只读的静态变量;
- 开发使用场景:在一个文件中经常使用的
字符串常量
,可以使用static与const组合
// 声明一个静态的全局只读常量
static const int a = 20;
// staic和const联合的作用:声明一个静态的全局只读常量
// 开发中经常拿到key修改值,因此用const修饰key,表示key只读,不允许修改。
static NSString * const key = @"name";
// 如果 const修饰 *key1,表示*key1只读,key1还是能改变。
static NSString const *key1 = @"name";
extern与const联合使用
- 开发中使用场景:在多个文件中经常使用的同一个字符串常量,可以使用extern与const组合。
- 原因:
static与const组合:在每个文件都需要定义一份静态全局变量。
extern与const组合:只需要定义一份全局变量,多个文件共享。
- 全局常量正规写法:开发中便于管理所有的全局变量,通常搞一个GlobeConst文件,里面专门定义全局变量,统一管理,要不然项目文件多不好找。