在过去开发中,几乎每一个人都会定义宏,因为这东西实在是好用,省去了代码量而且还不容易错,而我这篇文中所介绍的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的更多相关文章

  1. MemCache超详细解读

    MemCache是什么 MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高 ...

  2. MemCache超详细解读 图

    http://www.cnblogs.com/xrq730/p/4948707.html   MemCache是什么 MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于 ...

  3. MemCache详细解读

    MemCache是什么 MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高 ...

  4. rpm软件包管理的详细解读

    CentOS系统上使用rpm命令管理程序包:安装.卸载.升级.查询.校验.数据库维护 1.基本安装 rpm -ivh PackageFile 2.rpm选项 rpm -ivh --test Packa ...

  5. Android BLE蓝牙详细解读

    代码地址如下:http://www.demodashi.com/demo/15062.html 随着物联网时代的到来,越来越多的智能硬件设备开始流行起来,比如智能手环.心率检测仪.以及各式各样的智能家 ...

  6. 为你详细解读HTTP请求头的具体含意

    当我们打开一个网页时,浏览器要向网站服务器发送一个HTTP请求头,然后网站服务器根据HTTP请求头的内容生成当次请求的内容发送给浏览器.你明白HTTP请求头的具体含意吗?下面一条条的为你详细解读,先看 ...

  7. 详细解读Volley(三)—— ImageLoader & NetworkImageView

    ImageLoader是一个加载网络图片的封装类,其内部还是由ImageRequest来实现的.但因为源码中没有提供磁盘缓存的设置,所以咱们还需要去源码中进行修改,让我们可以更加自如的设定是否进行磁盘 ...

  8. 【Python】【Web.py】详细解读Python的web.py框架下的application.py模块

    详细解读Python的web.py框架下的application.py模块   这篇文章主要介绍了Python的web.py框架下的application.py模块,作者深入分析了web.py的源码, ...

  9. VINS-mono详细解读

    VINS-mono详细解读 极品巧克力 前言 Vins-mono是香港科技大学开源的一个VIO算法,https://github.com/HKUST-Aerial-Robotics/VINS-Mono ...

  10. SVO详细解读

    SVO详细解读 极品巧克力 前言 接上一篇文章<深度滤波器详细解读>. SVO(Semi-Direct Monocular Visual Odometry)是苏黎世大学Scaramuzza ...

随机推荐

  1. gson基本使用

    http://www.jianshu.com/p/d62c2be60617 http://blog.csdn.net/lk_blog/article/details/7685169

  2. [Docker] docker 基础学习笔记3(共6篇)

    首先我们安装好了ssh server之后, 我们需要将这个容器commit,然后启动这个被commit的image. 启动方式: docker run -d -p 2222:22 /usr/sbin/ ...

  3. [python] python实现2048游戏,及代码解析。

    我初学python,有不对之处望大家指教.转载请征得同意. 我在网络上也找了一些2048游戏代码的讲解,但都不是特别详细.所以我希望能够尽量详细的讲解.同时,有的地方我也不懂,希望大家能帮助补充.我会 ...

  4. tesseract-ocr

    tesseract-ocr 第一课 前言 据网上介绍tesseract-ocr性能不错,并且可以支持识别中文了.于是尝试一下.   安装 1.下载地址: https://code.google.com ...

  5. Android之数据库升级onUpgrade降级onDowngrade

    借用API文档解释: public abstract void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 当数据库需要升 ...

  6. gcd 最小公约数

    int gcd(int a, int b) { ? a : gcd(b, a % b); }

  7. DUILIB圆形头象

    #ifndef __UIHEADICON_H__#define __UIHEADICON_H__ /* 名称:圆形头像控件(派生CButtonUI类)*/ class CHeadUI: public ...

  8. JQuery源码解析-- 对象的创建

    使用 $("a") 返回的对象就不再是一个简单的DOM对象了,而是一个复杂的JQuery对象. 那么JQuery是怎么创建对象的. 为了便于分析,我将JQuery中复杂的代码简化了 ...

  9. C#获取程序集自动增加的版本号和编译时间

    1. 首先找到文件AssemblyInfo.cs, 路径如下: 2. 修改版本的格式,修改后,程序每次编译,程序集的版本号都会自增. 修改前: [assembly: AssemblyVersion(& ...

  10. php中ajax调用出错的问题

    最近用一些php,客户的使用jquery ajax的时候经常报错 ajax报错内容:readyState:4 status:"OK",statusText:"OK&quo ...