NSConstantString 对象的唯一性



在源代码中创建字符串对象的最简单方法是使用 Objective-C @"..."构建:

NSString *temp = @"/tmp/scratch";

请注意,以这种方式创建字符串常量时,应使用 UTF-8 字符。此类对象在编译时创建,并存在于程序的整个执行过程中。编译器使此类对象常量在每个模块的基础上是唯一的,并且它们永远不会被解除分配,尽管您可以像保留和释放任何其他对象一样保留和释放它们。您还可以像发送任何其他字符串一样将消息直接发送到字符串常量:

BOOL same = [@"comparison" isEqualToString:myString];

这是在 ObjC 文档中创建字符串的引述。

我已经在应用程序 A 中测试了不同的 @" 字符串,以及应用程序 A 使用的 libB。所有 @",使用 string=@"..." 初始化模式和具有相同内容都指向相同的内存地址。

因此,我不明白"每个模块基础"的含义,"每个模块"是什么意思? 基于库? 基于应用程序? 基于文件?

对于 Mac OS X 和 iOS 开发,模块相当于单个 .m/.mm/.c/.cpp 文件。

最新更新