关于extern、static、const的使用

extern:

  • 只是用来获取全局变量(包括全局静态变量)的值,不能用于定义变量
  • 先在当前文件查找有没有全局变量,没有找到,才会去其他文件查找。

如果在A.m中定义一个变量如下:

#import "A.h"
NSString *PropertyTypeInt = @"i";
NSString *PropertyTypeFloat = @"f";

而在另外一个类实现B.m中需要使用PropertyTypeIntPropertyTypeFloat,只需在B.m中这样实现:

#import "B.h"
extern NSString* PropertyTypeInt;
extern NSString* PropertyTypeFloat;

这时你会发现打印PropertyTypeIntPropertyTypeFloat,是if

static:

1.两个.m文件中同样的全局变量:


vc.m中定义

person.m中定义
报错提示,出现相同变量名

同一个工程中,两个不同 .m 文件中同样的全局变量不能同时存在

2.静态全局变量 :


在person.m中用static修饰agee
在ViewController中使用agee报错

因为在Person中agee是一个静态全局变量,尽管在ViewController使用了关键字extern想使用它,但还是不行的,静态全局变量只能在本文件中使用,不允许其他文件的调用!

const:

  1. 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文件,里面专门定义全局变量,统一管理,要不然项目文件多不好找。

参考文章

那些人追的干货

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • static 修饰局部变量 让局部变量只初始化一次 局部变量在程序中只有一份内存 并不会改变局部变量的作用域,仅仅...
    大冲哥阅读 1,389评论 0 1
  • 一、const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们...
    CoderZS阅读 318评论 0 4
  • 一. const 与 宏的区别 编译时刻: 宏是预编译(编译之前处理), const是编译阶段处理 编译检查: 宏...
    LZM轮回阅读 604评论 0 2
  • const,static,extern简介一、const与宏的区别(面试题):const简介:之前常用的字符串常量...
    BinaryRo阅读 258评论 0 1
  • 文、图 | 辛里 戴了草帽,扛了锄头,母亲要去地里干活了,那个小小的随身听音响,总不忘带上。红色的,像一团火,跳跃...
    辛里阅读 545评论 8 10