2014-07-15 55 views
0

我来自Java的Objective-C。我收集字符串是:为什么@目标C

NSString *greeting = @"Hello"; 

什么我不知道是为什么。我还需要@符号,而不仅仅是:

NSString *greeting = "Hello"; 

我似乎无法找到这个答案。

+1

因为使用了所有的其他字符。 (这与电子邮件地址中使用'@'的原因相同。) –

+0

另请参阅http://stackoverflow.com/questions/25749/what-does-the-symbol-represent-in-objective-c – rmaddy

回答

1

随着@"Hello"你得到一个NSString文字,一个对象。随着"Hello"你得到一个C字符串文字。类似地,有特殊语法创建NSArrayNSDictionaryNSNumber文字:

// Instantiate an array with objects a, b, c 
NSArray *myArray = @[a, b, c]; 

// Instantiate a dictionary (a map) with k1, k2, k3 as keys and o1, o2, o3 a 
NSDictionary *myDictionary = @{k1: o1, k2: o2, k3: o3}; 

// Instantiate a number with int 1234 
NSNumber *myNumber = @1234; 

来源:http://clang.llvm.org/docs/ObjectiveCLiterals.html

2

"Hello"是C字符​​串表达式或炭的换句话说数组c。 @"Hello"是类NSString的实例。

所以,这将是正确的:

NSString *greeting = @"Hello"; 
char *greeting2 = "Hello"; 
2
目的

-C是C的真实超集为“你好”是指C构建体(字符,又名C-字符串的数组c),它必须在Objective-C中也可以使用。为了将C-Strings从NSString对象中分离出来,需要一个符号来允许在编译期间创建文字。

其实@ -symbol用于整个目标C从C.区分目标C相关的东西(@selector()@[]@{}@try/@catch/@finally