初始化一个string,为什么需要`@`?

我对Objective-C非常陌生,但是我在C / C ++方面经验丰富,所以有些东西看起来很奇怪。 我正在阅读一个教程,该教程显示了Objective-C的基础知识,作者警告我忘记在我的string之前包含@ 。 所以,比如说

"Hello" vs @"Hello"

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

这是一个NSString文字。 没有@ ,你会创build一个char * ,而不是像NSString这样的对象。

Objective-C是C的超集,所以你应该知道"hello"是一个Cstring( const char * )。

@"hello"是不同的,它是NSString *NSString是ObjC对象,你可以发送消息给它,并使用像对象。 你不能用Cstring。

例如,从这两个string中获取长度:

 NSString *objcStr = @"hello"; int len = [objcStr length]; const char * cStr = "hello"; len = strlen(cStr); 

使用@表示Objective C特​​有的特性,而不是C中的特性。在这种情况下,如果需要Objective C NSString对象作为文本,则使用@否则最终会得到不同types的string不是一个Objective C对象,而是一个原始的C实体。