const 和 #define区别对待

const和#define都可以用来定义常量

const:用来定义一个常量, 其实在 C++中,const 修饰的常量能不能修改,还是需要看const指向常量还是指向常量的指针,在这里就不深入了,感兴趣的朋友可以在网上看看 C++中 const 的用法。const 命名遵循驼峰命名规则,如果仅在当前编译单元里面,则以小写 k开头;若在类之外调用,则以类名为前缀。

const 常量用 static 修饰意味着改常量仅在定义此变量的.m 文件中可见;如果不加 static,编译器会为它创建一个外部符号,此时,如果另一个文件中也声明了同名常量,就会报错。

如果 const 常量在其他的类中也需要用到,那么就需要放在全局符号表(global symbol table)中 了。

//   .h 文件

extern NSString *const ClassName_ConstantName;

//  .m 文件

NSString *const ClassName_ConstantName = @"name";

编译器看到头文件中的extern关键字,就能明白如何在引入此头文件的代码中处理该常量了,这个关键字是要告诉编译器,在全局符号表中将会有一个名叫ClassName_ConstantName的符号;编译器无需查看其定义。

define, 定义常量, 是一条预编译指令, 编译器在编译阶段会将所有使用到宏的地方简单地进行替换. 

区别:

define不指定类型,const指定类型

const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是像#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝,

宏能做到const不能办到的事.

1、宏能定义函数

2、OC的单例模式用到宏

3、宏还能根据传入的参数生成字符串

4、宏定义的常量可以被重写

http://www.cocoachina.com/ios/20160519/16342.html

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

推荐阅读更多精彩内容

  • 刚从事IOS这行的时候,const很少用,主要是用#define和enum,后来慢慢的注意到,如何提升代码的...
    张付东阅读 2,433评论 0 3
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,555评论 1 51
  • 寻香去,落花成冢,惹鼻香进,失魂落魄。蓦然回首终是梦,泪下颜憔魂断肠。 凭望处,崖间一壑,晴阳入眼,坠人稍眉。奈何...
    千Li阅读 240评论 3 1
  • 小时候, 我走在后面, 爸妈走在前面, 我走得从容, 因为爸妈在眼前。 长大后, 我走在前面, 爸妈走在后面, 我...
    陈二西阅读 385评论 0 3
  • 既来之,则安之。 许你一份淡然,一份认真。 或许,我们放不过的是曾经的自己。我们拥有各自的生活。兴许有人愿意让你在...
    我是傻姑娘阅读 422评论 0 0