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

时间:2013-05-17 03:37:17

标签: ios objective-c

我是Objective-C的新手,但我对C / C ++很有经验,所以有些事情对我来说很奇怪。我正在阅读一个教程,其中显示了Objective-C的基础知识,作者警告我忘记在我的字符串之前包含@。所以,例如

"Hello" vs @"Hello"

然而,作者没有解释为什么@是必需的或者它的句法意义是什么。那就是我现在要问的问题,@做了什么?

3 个答案:

答案 0 :(得分:12)

这是一个NSString字面值。如果没有@,您就会创建一个char *,而不是像NSString这样的对象。

答案 1 :(得分:3)

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

@"hello"有所不同,它是NSString *NSString是ObjC对象,您可以向其发送消息并使用like对象。你不能用C string做到这一点。

例如,

从这两个字符串获取长度:

NSString *objcStr = @"hello";

int len = [objcStr length];

const char * cStr = "hello";

len = strlen(cStr);

答案 2 :(得分:0)

@的使用指定了Objective C特​​有的功能,而不是原始C。在这种情况下,如果您希望将Objective C NSString对象作为文字,则使用{{ 1}}否则你最终会得到一个不同于Objective C对象的字符串,而不是一个原始C实体。