iOS基础知识寒哥管理的技术专题实用工具

关于const,extern,static

2015-07-11  本文已影响193人  齐滇大圣

创建常量的问题###

oc中有一些方法是创建常量的,但是具体用哪一种好呢?


const
在标准C中const定义的变量是外连接的,即如果一个编译单元中定义了一个全局const常量,则其在其他编译单元中是可见的,如果其他编译单元也定义了同名const常量就会产生重复定义错误。

比如在 constViewController.m 文件中定义了 const int SONSTTEST = 1;
然后在 ViewController.m中也定义了const int SONSTTEST = 1;而ViewController.m并未引入constViewController.m,编译器也会报错。

const int SONSTTEST = 1;改为static const int SONSTTEST = 1;就是把const常量标记为对外不可见

/----------指针常量----------/
NSString * const ptr1 = @"AB";
ptr1 = @"A"; //错误,指针不可变,所以ptr1不可变

/----------常量指针---------/
const NSString *ptr1 = @"AB"; (从右往左读,const修饰的是 *ptr1)
ptr1 = @"A"; //正确,*ptr1不可变,ptr1可变


extern
全局的变量

假如其他a类中已经声明了meString,你在另外一个b类中想使用这个变量,可以extern NSString* meString;会得到a类中同样的值.


个人觉得如果使用局部的常量可以在.m中用
static const int a = 1

如果使用全局的常量的话可以使用
extern const, 比如在a类中声明了 meString,在b中引入a.h就可以直接使用meString。 如果没引入的话在b中extern NSString* meString;也能得到a类中同样的值。 所以比较适合属于某一个类中的全局常量,其他类可以直接使用。

如果使用属于整个application的全局常量的话就可以使用
#define macro


github 测试demo

上一篇 下一篇

猜你喜欢

热点阅读