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