iOS-详细解读Const
在过去开发中,几乎每一个人都会定义宏,因为这东西实在是好用,省去了代码量而且还不容易错,而我这篇文中所介绍的const可以完美替带宏定义. 并且苹果也建议大家抛弃宏定义而转投const ,并且swift里压根就没有宏定义这么一说,所以为了方便我们以后的开发,还是尽早弃暗投明的好 .
进入正题我们先来说说,
一. const与宏的区别:
(1)执行时刻:宏是预编译(编译之前处理),const是编译阶段。
(2)编译检查:宏不做检查,不会报编译错误,只是替换,const会编译检查,会报编译错误。
(3)宏能定义一些函数,方法。 const不能。
(这里需要证实一点,宏不会开辟新的内存空间 ,而是存放在常量区 ).
二.const作用:限制类型
(1).const仅仅用来修饰右边的变量(基本数据变量p,指针变量*p)
(2).被const修饰的变量是只读的。
三.const的具体用法
const:修饰基本变量p
// 这两种写法是一样的,const只修饰右边的基本变量b
const int b = ; // b:只读变量
int const b = ; // b:只读变量
// 不允许修改值
需要注意下面两句的区别
int const *p1; // *p1:常量 p1:变量
// const修饰指针变量p1
int * const p1; // *p1:变量 p1:常量
从上面看来,const的定义区间就一目了然了 ,只要看它后面跟的是不是指针,则指针的指向就是不可改变的, 如果后面是变量则变量的值不可修改.
四.static与const联合使用
static与const作用:
(1)声明一个只读的静态变量
那么为什么要改变全局变量作用域,主要是为了防止重复声明全局变量。 在开发中声明的全局变量,有些不希望外界改动,只允许读取。这时就需要两者一起使用.
(2) 声明一个静态的全局只读常量
比如一个基本数据类型不希望别人改动 // static const int a = 10;
(3)也可以用来代替宏,把一个经常使用的字符串常量,定义成静态全局只读变量.
(4)开发中经常拿到key修改值,因此用const修饰key,表示key只读,不允许修改。
static NSString * const key = @"name"; 注意如果 const修饰 *key1,表示*key1只读,key1还是能改变。
static NSString const *key1 = @"name";
五.extern与const联合使用
开发中使用场景:在`多个文件中`经常使用的同一个字符串常量,可以使用extern与const组合。
原因:
(1) static与const组合:在每个文件都需要定义一份静态全局变量。
(2) extern与const组合:只需要定义一份全局变量,多个文件共享。
开发中便于管理所有的全局变量,通常搞一个文件,里面专门定义全局变量,统一管理,要不然项目文件那么多,大家很容易定义冲突。
iOS-详细解读Const的更多相关文章
- MemCache超详细解读
MemCache是什么 MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高 ...
- MemCache超详细解读 图
http://www.cnblogs.com/xrq730/p/4948707.html MemCache是什么 MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于 ...
- MemCache详细解读
MemCache是什么 MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高 ...
- rpm软件包管理的详细解读
CentOS系统上使用rpm命令管理程序包:安装.卸载.升级.查询.校验.数据库维护 1.基本安装 rpm -ivh PackageFile 2.rpm选项 rpm -ivh --test Packa ...
- Android BLE蓝牙详细解读
代码地址如下:http://www.demodashi.com/demo/15062.html 随着物联网时代的到来,越来越多的智能硬件设备开始流行起来,比如智能手环.心率检测仪.以及各式各样的智能家 ...
- 为你详细解读HTTP请求头的具体含意
当我们打开一个网页时,浏览器要向网站服务器发送一个HTTP请求头,然后网站服务器根据HTTP请求头的内容生成当次请求的内容发送给浏览器.你明白HTTP请求头的具体含意吗?下面一条条的为你详细解读,先看 ...
- 详细解读Volley(三)—— ImageLoader & NetworkImageView
ImageLoader是一个加载网络图片的封装类,其内部还是由ImageRequest来实现的.但因为源码中没有提供磁盘缓存的设置,所以咱们还需要去源码中进行修改,让我们可以更加自如的设定是否进行磁盘 ...
- 【Python】【Web.py】详细解读Python的web.py框架下的application.py模块
详细解读Python的web.py框架下的application.py模块 这篇文章主要介绍了Python的web.py框架下的application.py模块,作者深入分析了web.py的源码, ...
- VINS-mono详细解读
VINS-mono详细解读 极品巧克力 前言 Vins-mono是香港科技大学开源的一个VIO算法,https://github.com/HKUST-Aerial-Robotics/VINS-Mono ...
- SVO详细解读
SVO详细解读 极品巧克力 前言 接上一篇文章<深度滤波器详细解读>. SVO(Semi-Direct Monocular Visual Odometry)是苏黎世大学Scaramuzza ...
随机推荐
- 修改linux文件权限命令:chmod(转)
Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作. 文件或目录的访问权限分为只读,只写和可执行三种.以文件为例,只读权限表示只允许读其内容,而禁 ...
- [Zigbee]定时器1
注意:在定时器可以使用一个输入/输出引脚之前,所需的 I/O 引脚必须配置为定时器 1 的外设引脚. 定时器1的引脚映射方案选用是备用2方案:P07对应通道3.P06-通道4.P12-通道0.P11- ...
- Jquery给动态生成的对象绑定事件
$(document).on("blur", ".Text1", function () { var index = this.id.replace('txtS ...
- Light OJ 1031 - Easy Game(区间dp)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1031 题目大意:两个选手,轮流可以从数组的任意一端取值, 每次可以去任意个但仅 ...
- js获取鼠标当前的位置
有时候,我们需要得到窗口拖动或者鼠标移动的距离,此时可以通过计算鼠标前后在页面中的位置来得到想要的结果,下面介绍几个事件属性: 1.客户区坐标位置 鼠标事件都是在浏览器视口中的特定位置上发生的.这个位 ...
- 如何理解反向传播 Backpropagation 梯度下降算法要点
http://colah.github.io/posts/2015-08-Backprop/ http://www.zhihu.com/question/27239198 待翻译 http://blo ...
- iis7下配置php出现404.17错误的解决办法
服务器上建有几个PHP站点,都在正常运行.今天又新建了一个PHP站点,处理程序模块配置的和其他几个都一样,但就是跑不起来,一直提示404.17错误,重启服务器也不行. 最后实在没办法了,就把正常运行站 ...
- java socket 网络编程常见异常
1.java.net.SocketTimeoutException 这个异常比较常见,socket超时.一般有2个地方会抛出这个,一个是connect的时候,这个超时参数由connect(Socket ...
- RFC2119:表示要求的动词(转)
RFC(Request For Comments)指的关于互联网标准的正式文件,它们的内容必须写得非常清楚. 表达的时候,必须严格区分哪些是"建议"(suggestion),哪些是 ...
- AJAX应用优势
国内翻译(仅音译)常为 “阿贾克斯” 和阿贾克斯足球队同音. 使用ajax 构建应用程序 这个术语源自描述从基于 Web 的应用到基于数据的应用的转换.在基于数据的应用中,用户需求的数据如联系人列表, ...