关于ios:初始化一个字符串,为什么需要`@`?

Initializing a string, why is `@` required?

本问题已经有最佳答案,请猛点这里访问。

我对Objto-C很陌生,但我对C/C++有一定的经验,所以我觉得有些事情很奇怪。我正在阅读一个教程,它展示了Objective-C的基本知识,作者警告我不要忘记在字符串前加上@。所以,举个例子

"Hello"@"Hello"的比较

然而,作者没有解释为什么需要使用@,或者它的语法意义是什么。所以这就是我现在要问的,@是做什么的?


这是一个NSString字。如果没有@,您将创建一个char *,它不像NSString那样是一个对象。


objective-c是c的超集,所以应该知道"hello"是c字符串(const char *)。

@"hello"是不同的,它是NSString *NSString是objc对象,可以向它发送消息并使用like对象。不能用C字符串。

例如,要从这两个字符串中获取长度:

1
2
3
4
5
6
7
NSString *objcStr = @"hello";

int len = [objcStr length];

const char * cStr ="hello";

len = strlen(cStr);


使用@指定了目标C特有的特性,而不是原始C中的特性。在这种情况下,如果您希望使用目标C NSString对象作为文本,则可以使用@,否则最终会得到一个不同类型的字符串,它不是目标C对象,而是原始C实体。