关于const,extern,static

创建常量的问题###

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

  • #define macro
  • const(const int a = 1 跟 int const a=1 一样都是修饰的a不可变)
  • static const
  • extern const
  • enum (只可以定义integer类型的常量)

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch...
    阳光的大男孩儿阅读 5,016评论 0 13
  • static 修饰局部变量 让局部变量只初始化一次 局部变量在程序中只有一份内存 并不会改变局部变量的作用域,仅仅...
    大冲哥阅读 1,389评论 0 1
  • const,static,extern简介一、const与宏的区别(面试题):const简介:之前常用的字符串常量...
    BinaryRo阅读 258评论 0 1
  • 一、const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们...
    金约21依代阅读 231评论 0 1
  • 似乎快要忘记北海咸湿的海风,在我不再吟唱西海情歌之后。 你的一颦一笑像是解药,我的伤口,在你如初的眼神里,慢慢愈合...
    涅槃_d529阅读 194评论 0 0