我们在看一些大牛的第三方时,里面会出现很多const、static和extern,尤其是const和static,const和extern的结合使用,直接令很多小伙伴懵逼了,今天就详细讲解一下这三个关键字的正确使用方式。

一、const

const的作用和宏是很类似的,其实,苹果是不推荐我们使用宏的,它更喜欢我们使用const,于是乎,在swift中宏就被抛弃了,我们只能使用const。

在这里简单聊一下const和宏的区别:

1.编译时刻  宏:预编译 const:编译

2.编译检查  宏没有编译检查,不会报编译错误,只是替换;const有编译检查,会报编译错误

3.宏的好处  宏能定义一些函数,方法,但是const不可以

4.宏的坏处  大量使用宏,会导致预编译时间过长。

const有两个作用:

1.修饰右边的基本变量和指针变量;

2.被const修饰的变量只读,也就是只能获取,不能修改。

const的使用场景:

1.修饰全局变量  ==>全局只读变量  ==>  代替宏

2.修饰方法中的参数

代码如下:

NSString * const gender = @"gender";

[[NSUserDefaults standardUserDefaults] objectForKey:gender];

二、static

static有两个作用:

1.修饰局部变量:被static修饰的局部变量,可以延长生命周期,生命周期跟整个应用程序一致;被static修饰的局部变量,只会分配一次内存。

代码如下:

- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent *)event {

static int i = 0;

i++;

NSLog(@"%d", i);

}

2.修饰全局变量:被static修饰的全局变量,作用域会修改,生命周期不会改,只能在当前文件下使用。

代码如下:

static int m = 0;

三、extern

extern作用:声明外部全局变量。

extern工作原理:先会去当前文件下查找有没有对应全局变量,如果没有,才会去其他文件查找。

四、static和const的结合使用

static,const结合使用的作用:声明一个只读的全局静态变量。

开发使用场景:在一个文件中经常使用的字符串常量,可以使用static与const组合。

代码如下:

static NSString * const name = @"name";

[[NSUserDefaults standardUserDefaults] setObject:@"123" forKey:name];

五、extern和const的结合使用

使用场景:在多个文件中经常使用的同一个字符串常量,可以使用extern与const组合。

开发时有个规定,为了避免重复报错,全局变量不能定义在自己的类中,我们需要自己创建一个全局文件管理全局东西。

创建一个全局类GlobelConst。

代码如下:

#import<Foundation/Foundation.h>

extern NSString * const discover_name;

extern NSString * const home_name;

#import "GlobelConst.h"

//定义整个项目中的全局变量

/**********  发现模块  **********/

NSString * const discover_name = @"name";

/**********  首页模块  **********/

NSString * const home_name = @"name";

[[NSUserDefaults standardUserDefaults] setObject:@"123" forKey:discover_name];

[[NSUserDefaults standardUserDefaults] objectForKey:discover_name];

最新文章

  1. 自己来实现一个简易的OCR
  2. Caf.CMS是一个免费的、 开源,功能齐全的CMS
  3. jQuery基础 -- 如何判断页面元素存在与否
  4. Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完毕測试代码)
  5. NEURAL NETWORKS, PART 2: THE NEURON
  6. mysql dos启动出现1067错误的解决方法
  7. 自制简单表单验证relative与absolute定位
  8. C# DataTable转实体 通用方法【转】
  9. cannot load supported formats intellij 解决的方法
  10. Node.js:url
  11. eclipse中创建类和方法自动注释
  12. Linux--线程安全与可重入函数的异同
  13. git - 管理项目(SourceTree的使用)
  14. JS(JavaScript)的进一步了解1(更新中&#183;&#183;&#183;)
  15. Python-接口自动化(七)
  16. ELK简单安装测试
  17. FtpHelper实现ftp服务器文件读写操作(C#)
  18. 将CSDN内容移过来
  19. C语言访问一个链接
  20. python 利用split读取文本文件中每一行的数字并保存至相应文件夹

热门文章

  1. 【Demo】QQ,github,微博第三方社交登录
  2. C#常用控件介绍
  3. 【LINUX】VI相关命令
  4. MVC 上传 下载
  5. JMeter学习-022-JMeter 分布式测试(性能测试大并发、远程启动解决方案)
  6. ipxe引导远程的windows
  7. Python开发程序:学员管理系统(mysql)
  8. centos7 firewalld
  9. centos 安装redis并加入系统服务
  10. 使用CTE减少统计子查询