Objective-C中的const ,extern,static

Posted 奈文摩尔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于Objective-C中的const ,extern,static的主要内容,如果未能解决你的问题,请参考以下文章

SecurityException:权限拒绝:读取 com.android.providers.media.MediaProvider 需要 android.permission.READ_EXTER

Objective-C/Swift中定义常量有啥区别?

OC基础--Objective-C本质

Objective-C NSData/NSMutableData

Objective-C底层数据结构

Objective-C Associated Objects 初识