在Objective-C中,我可以写:
id pString = @"Hello, World.";
Run Code Online (Sandbox Code Playgroud)
并且编译器将实例化NSString而不需要显式调用工厂方法.但是,NSString实际上只是一个Foundation类,因此可能不是实际Objective-C语言定义的一部分.
因此,当我编写时@"String",编译器如何知道特别是构建NSString,而不是其他类似字符串的对象?换句话说,Objective-C 语言停止在哪里,基础库开始?
当你在Cocoa或GNUStep环境之外编写Objective-C代码时,@"..."没有链接到NSString.
在这种情况下,gcc提供了一个用于指定与文字字符串关联的类的选项:
-fconstant-string-class = class-name
使用class-name作为类的名称,以便为使用语法"@"...""指定的每个文字字符串进行实例化.默认的类名是"NXConstantString".