我们在看一些大牛的第三方时,里面会出现很多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];

const、static和extern的正确使用方式的更多相关文章

  1. iOS正确使用const,static,extern

    static 修饰局部变量 让局部变量只初始化一次 局部变量在程序中只有一份内存 并不会改变局部变量的作用域,仅仅是改变了局部变量的生命周期(只到程序结束,这个局部变量才会销毁) 修饰全局变量 全局变 ...

  2. 如何正确使用const、static、extern

    转自:http://www.jianshu.com/p/2fd58ed2cf55 前言 本篇文章主要介绍在开发中怎么使用const.static.extern关键字. 一.const 与宏的区别: c ...

  3. const,static,extern 简介

    const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...

  4. 李洪强iOS经典面试题155 - const,static,extern详解(面试必备)

    李洪强iOS经典面试题155 - const,static,extern详解(面试必备) 一.const与宏的区别(面试题): const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽 ...

  5. const,static,extern简介

    一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 编译时刻:宏是预编译(编译之前处理),const是编译阶段. 编 ...

  6. const,static,extern简介(重要)

    一.const与宏的区别(面试题): const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 编译时刻:宏是预编译(编译之前处理),const是编译 ...

  7. 88、const、static、extern介绍

    一.const与宏的区别 const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编译(编译之前处理)const是编译阶段. 编译检 ...

  8. 《OOC》笔记(1)——C语言const、static和extern的用法

    <OOC>笔记(1)——C语言const.static和extern的用法 C语言中const关键字用法不少,我只喜欢两种用法.一是用于修饰函数形参,二是用于修饰全局变量和局部变量. 用c ...

  9. iOS 中 const static extern 关键字总结

    在看一些高手所写的代码时,总是可以看到我们小白平常不用的关键字,一次,两次,三次,不能总是不明不白,现在总结一下日常开发中常用的关键字的作用: 关键字const/static/extern的释义和用法 ...

随机推荐

  1. java 4种方式读取配置文件 + 修改配置文件

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[-] 方式一采用ServletContext读取读取配置文件的realpath然后通过文件流读取出来 方式二采用ResourceB ...

  2. How to inspect who is caller of func and who is the class of instance

    1. Who is the class of self instance ? class aa(object): def a(self): if self.__class__.__name__ == ...

  3. linux 压缩 解压zip 命令

    将当前目录下的所有文件和文件夹全部压缩成test.zip文件,-r表示递归压缩子目录下所有文件zip -r test.zip ./* 打包目录zip test2.zip test2/*解压test.z ...

  4. css background-size 属性 兼容ie8 ie7 方案

    <!-- background-size-polyfill v0.2.0 | (c) 2012-2013 Louis-Rémi Babé | MIT License --> <PUB ...

  5. PHP中include引用导致不能再次相对引用文件的一个小问题

    今天遇到一个问题:php,incldue_once引入多次文件,多层引用,所以,不同目录下的文件要使用一个文件得先确定目录,比如(下例是提取出来的精简例子,组织的有点乱乱的): /homepage/i ...

  6. C#程序以管理员权限运行

    原文:C#程序以管理员权限运行 C#程序以管理员权限运行 在Vista 和 Windows 7 及更新版本的操作系统,增加了 UAC(用户账户控制) 的安全机制,如果 UAC 被打开,用户即使以管理员 ...

  7. nginx 客户端不缓存header

    location ~* \.(html|htm)$ { add_header Cache-Control no-store; }

  8. VR原理讲解及开发入门

    本文是作者obuil根据多年心得专门为想要入门的VR开发者所写,由52VR网站提供支持.   1. VR沉浸感和交互作用产生的原理:   在之前,我们观看一个虚拟的创造内容是通过平面显示器的,52VR ...

  9. ElasticSearch作为Windows服务启动

           由于公司服务器用的Windows服务器,所以你懂得…… 直接下载elasticsearch中文发行版.下载地址是:https://github.com/medcl/elasticsear ...

  10. IOS在线安装App

    在越狱设备上可以安装,如果设备不越狱也想安装,就要企业发布权限了,可惜我没有,所以不能测试了! 1.创建ipa及plist文件: XCode菜单栏->Product->Archive-&g ...