4和@ 4有什么区别?

时间:2014-03-05 03:12:19

标签: objective-c

我刚开始学习这个,并且教程开始时使用@符号在所有数字文字和字符串文字之前,我想“好吧,Objective-C在文字之前使用@符号”,但接下来的事情你知道他们使用了一些数字没有 @符号,我完全失去了。

(我说的是'数字',因为我害怕说int,因为Objective-C / C有这么多类型的数字。)

有什么区别?

3 个答案:

答案 0 :(得分:4)

Objective C是C的扩展,因此它在C使用文字的地方使用常规文字 - 即提供基本类型intlong等的值。

此外,Objective C支持Cocoa框架的NSNumber类。此类的对象用于换行原始值,以用于需要对象的用途 - 例如,放入集合中。 Cocoa集合不接受基本类型的值,因此在将数值放入集合之前需要提供对象包装器。

目标C不支持创建类型为NSNumber的文字,因此您需要手动包装文字,如下所示:

[NSNumber numberWithInt:4]

键入的内容太多,尤其是当您需要定义多个此类值以放入集合时。这就是为什么Objective C为创建NSNumber s添加了另一种语法 - 具有@符号的语法。因此,当您编写@4时,这与编写[NSNumber numberWithInt:4]相同,但输入的次数要少得多。例如,在旧语法中看起来像这样的初始化

NSArray *oneTwoThree = [NSArray arrayWithObjects: [NSNumber numberWithInt:1], [NSNumber numberWithInt:2], [NSNumber numberWithInt:3], nil];

现在看起来像

NSArray *oneTwoThree = @[@1, @2, @3];

更具可读性。

注意:第二个代码段也使用新语法进行数组初始化。

答案 1 :(得分:2)

int类型和NSNumber对象之间存在差异。 int是用于存储整数的数据类型。您可以像这样创建一个int:int i = 4;

NSNumber是一个Objective-C对象,可以存储任何类型的数字,以及int,double,float,short,long等。这个创建类似于NSNumber *num = @4;,实际上变为NSNumber *num = [NSNumber numberWithInt: 4];

使用@4而不是4的主要原因是NSArrays和NSDictionary。您只能在这些对象中存储对象,而不是int或float等类型。因此,如果您想要一组数字,则必须像[NSArray arrayWithObjects: @1, @2, @3, @4, nil];

@已经实现了其他用途。就像数字如何通过向其添加@而成为对象一样,C-String "Hello World"成为具有@"Hello World"的Objective-C对象(NSString)。 C-Array [1,2,3,4]成为带@[@1,@2,@3,@4]的Obj-C对象(NSArray)。与词典相同:@{key,value}

如果您想了解有关文字的更多信息,可以使用this linkthis link

答案 2 :(得分:0)

一个是数字(一个int,一个标量)。另一个是NSNumber(一个Objective-C对象;在这个表示法上,见http://clang.llvm.org/docs/ObjectiveCLiterals.html)。