理解Objective-C和Foundation之间的界限,特别是NSString

Cas*_*ker 11 objective-c

在Objective-C中,我可以写:

id pString = @"Hello, World.";
Run Code Online (Sandbox Code Playgroud)

并且编译器将实例化NSString而不需要显式调用工厂方法.但是,NSString实际上只是一个Foundation类,因此可能不是实际Objective-C语言定义的一部分.

因此,当我编写时@"String",编译器如何知道特别是构建NSString,而不是其他类似字符串的对象?换句话说,Objective-C 语言停止在哪里,基础开始?

mou*_*iel 6

当你在Cocoa或GNUStep环境之外编写Objective-C代码时,@"..."没有链接到NSString.

在这种情况下,gcc提供了一个用于指定与文字字符串关联的类的选项:

-fconstant-string-class = class-name
使用class-name作为类的名称,以便为使用语法"@"...""指定的每个文字字符串进行实例化.默认的类名是"NXConstantString".

  • 此链接提供了更多信息:http://gcc.gnu.org/onlinedocs/gcc/Constant-string-objects.html (2认同)