iOS 宏(define)与常量(const)的理解

define和const

在iOS开发中经常会用到define和const。下面我们就来看看宏(define)和常量(const)的区别:

  • define只是在预编译时进行文本替换,const是在编译阶段。
  • define没有任何的类型检查,所以在类型错误的时候是不会有提示。const是有类型检查的会有错误提示。
  • define不仅可以定义常量,还可以定义方法。而常量(const)只能定义常量,不能定义方法。
  • const修饰具有就近性,即const后面的参数是不可变的。const修饰的参数具有只读性。
  • 大量的define会导致二进制文件变大。从而导致编译时间变长
    *编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高
//注意 const是常量声明,保证其不可修改。需要区分的是const位置不同的效果:
const NSString *text = @"abcde";  //*text指针不能修改,text可以修改。
NSString * const text = @"abc"; //*text指针可以修改,text不能修改。

extern

  • extern修饰的一个全局变量,多个文件都可以访问
  • 用extern修饰的变量必须要定义,而且只能定义一次。通常将其定义在与声明该常量的头文件相关的而实现文件里。有实现文件生成目标文件时,编译器会在数据段为字符串分配存储空间
.h
extern NSString *const Test;
.m
NSString *const Test = @"www.baidu.com”;
//这样定义常量要优于使用#define预处理指令,因为编译器会确保常量值不变。一旦 .m 文件中定义好了,即可随处使用,而采用预处理指令定义常量可能会无意中修改,从而导致应用程序各个部分使用的值互不相同。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • ### const,static,extern简介 ### 一、const与宏的区别(面试题): * `const...
    老骚鹅阅读 3,878评论 0 7
  • 注:这是第三遍读《C语言深度解剖》,想想好像自从大学开始就没读完过几本书,其中谭浩强的那本《C语言程序设计(第四版...
    HavenXie阅读 5,780评论 1 6
  • static 修饰局部变量 让局部变量只初始化一次 局部变量在程序中只有一份内存 并不会改变局部变量的作用域,仅仅...
    大冲哥阅读 5,239评论 0 1
  • 我是日记星球212号星宝宝万儿,这是我在日记星球写的第85篇原创日记。 一晃之间,坚持了这么久。第六期的培训结束了...
    万儿阅读 1,054评论 0 2
  • 莫名心慌。我一个人走的好冷好冷。仿佛已成冰山,我所有的喜怒哀乐早已随着时光的流逝,而悄然消失。孤独的好冷好冷,,也...
    花墙暖光阅读 1,306评论 0 0

友情链接更多精彩内容