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

define和const

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

  • 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 文件中定义好了,便可随处使用,而采用预处理指令定义常量可能会无心中修改,从而致使应用程序各个部分使用的值互不相同。 复制代码
相关文章
相关标签/搜索