2013-01-23 51 views

回答

7

NSArray * array = @[];初始化数组之间的区别是做NSArray * array = [NSArray array];

+1

1.与Xcode的版本无关(与使用的语言/标准/编译器的版本相关,而Xcode不是其中之一)。 2.“和NSString * string = @”“;'” - 我不这么认为。前者创建一个数组,后者创建一个字符串。 – 2013-01-23 15:56:33

+0

一个很好的猜测,但大多数不正确。第一句话是正确的,休息是错误的。 – bbum

+0

是的,这是正确的。很快就写下了我的答案。编辑我的答案。我的错。 – Mikael

9

@[]的新方式是简写:

id a = nil; 
NSArray* array = [NSArray arrayWithObjects:&a count:0]; 

对于所有意图和目的,这只是[NSArray array]的简写。

这是在编译器的特定版本中添加的功能(并且实际上并不需要运行时支持特定语法)。

这是一点都不像@""速记在@""产生编译时常并且将导致在运行时没有消息。事实上,@""(任何@"sequence")是一种特殊情况,它发出的编译时间常量在运行时用零消息传递实现;零动力。 A @"..."与Objective-C类相比,更像一个对象的常规实例。

+0

我认为@“”会产生一个NSString对象而不是编译时间常量。 –

+3

不是;它确实是一个编译时间常量,它通过动态链接器加载,就像类和其他编译时发出的数据一样。没有消息涉及。 – bbum