在Objective-C中,以下两行之间有什么区别:
#define myInteger 5
static const NSInteger myInteger = 5;
假设它们位于实现指令上方的MyClass.m中。
答案 0 :(得分:14)
#define myInteger 5
是预处理器宏。在编译器启动之前,预处理器将用myInteger
替换5
的每个出现。它不是一个变量,它只是一种自动查找和替换机制。
static const NSInteger myInteger = 5;
这是一个常量的“真实”变量(声明后不能更改)。静态意味着它将是对该块的多次调用的共享变量。
答案 1 :(得分:2)
使用#define时,在将代码转换为二进制代码之前,编译器会将指定值替换为标识符。这意味着编译器在编译应用程序时进行替换。
当你使用const并运行应用程序时,会为常量分配内存,并在运行应用程序时替换值。
答案 2 :(得分:2)
存在差异:
定义是文本替换:
静态const是内存中的变量
答案 3 :(得分:1)
#define myInteger 5
是一个声明常量的宏。
因此,只要您使用myInteger
宏,它就会被预处理器引擎替换为5。
const NSInteger myInteger = 5;
声明一个保存值为5的变量myInteger。
但它们的用法是相同的,即它们是可用于防止硬编码的常量。