2

同一字符串的多个#define 是否使用相同的常量字符串?假设我在多个地方执行以下操作:

#define TEST @"test"

编译器足够聪明,知道它引用了数据部分中的相同常量字符串,对吧?

4

2 回答 2

2

确实,您的问题与#define的作用没有太大关系,而是与编译器如何处理字符串文字有关。编译器将字符串对象插入到程序映像中,这是只读的并且不实现保留计数。这是一种优化,因此不需要在运行时创建字符串。

通常编译器足够聪明,可以识别出您使用的是相同的字符串文字,并且会使用相同的常量字符串,但不会在堆中。

还要检查这个问题:ObjectiveC string literals 的权威描述?

于 2013-07-01T21:36:16.023 回答
1

编译器做了一些叫做字符串实习的事情。这不是必需的操作,因此如果您的代码依赖于test位于同一地址,那么您可能会遇到一些问题。在大多数情况下是的,它会尝试重用相同的字符串,只是让它们都指向同一个字符串(在只读内存中)。

于 2013-07-01T21:34:19.433 回答