zoukankan      html  css  js  c++  java
  • Objective-C中的const ,extern,static

    一.const

    1>对于const,记住关键的一点,它只是修饰右边的变量.

    例如:

    - (void)viewDidLoad {
        [super viewDidLoad];   
        // const两种用法
        // const:修饰基本变量p
        // 这两种写法是一样的,const只修饰右边的基本变量b
        const int b = 20; // b:只读变量
        int const b = 20; // b:只读变量
    // const修饰指针变量访问的内存空间,修饰的是右边*p1, // 两种方式一样 const int *p1; // *p1:常量 p1:变量 int const *p1; // *p1:常量 p1:变量
    // const修饰指针变量p1 int * const p1; // *p1:变量 p1:常量
    // 第一个const修饰*p1 第二个const修饰 p1 // 两种方式一样 const int * const p1; // *p1:常量 p1:常量 int const * const p1; // *p1:常量 p1:常量 }

    2>对于const的应用场景

    //如果我需要一个方法,参数是地址,只能通过地址获取值,不能修改地址
    
    //*a 只读  不能修改*a
    - (void)test:(const int *)a{
        a = 20;
    }
    
    //如果不能修改a的值,只能修改a访问的值
    //a 只读  不能修改a
    - (void)test1:(int * const)a{
        *a = 20;
    }

    3>const和宏的区别

      (1)宏是预编译执行,const是编译执行.

      (2)宏不会做编译检查,它只是做替换,因此不会编译报错;const会编译检查,会编译报错.

      (3)宏能定义方法或函数,const不能.

      (4)大量使用宏会造成编译时间长久.

      (5)注意:大量使用宏并不会消耗很多内存,宏定义的是常量,常量是存放在常量去,只生成一份内存,并不像有些人所说的会消耗很多内存!

    二.static和extern

    1>static作用:

       (1)修饰局部变量

          1)延长局部变量的声明周期,程序结束才销毁

          2)局部变量只初始化一次,节省内存

          3)改变作用域

         (2)修饰全局变量

          1)只能在本文件中访问,修改全局变量作用域,生命周期不改变

          2)避免重复定义全局变量

    2>extern作用:

        (1)只是用来获取全局变量的值,不能用来定义变量

        (2)工作原理是先在本文件中查找有没有全局变量,没有找到的话再去其他文件中查找.

    三.static和const一起使用

    1>防止重复声明全局变量

    2>不希望同事无意中修改变量,只允许读取

    3>声明一个静态的全局只读常量

    四.extern与const一起使用

    1>在多个文件中经常使用同一个字符串常量,用extern和const组合使用

    2>一般建一个GlobeConst

  • 相关阅读:
    linux系统命令记录
    window下,nodejs 安装 http-server,开启命令行HTTP服务器
    前端学习记录2:设计稿分析
    前端学习记录1:开始
    如何做到让自己长时间精神专注?
    sublime使用
    nodejs 第一次使用
    收集好看的效果及互动页面
    转 如何赢得朋友和获得影响力
    转 scrollLeft,scrollWidth,clientWidth,offsetWidth之完全详解
  • 原文地址:https://www.cnblogs.com/naiwenmoer/p/5518498.html
Copyright © 2011-2022 走看看