这些NSArray初始化方法有何不同?

时间:2013-01-23 15:18:40

标签: ios objective-c cocoa

  

可能重复:
  NSArray initialization methods

使用

初始化数组有什么区别
NSArray * array = [NSArray array];

NSArray * array = @[];

3 个答案:

答案 0 :(得分:2)

这两个表达式通常是等价的。

Clang's documentation列出了对象文字的警告:

  

使用文字或盒装表达式语法创建的对象不保证运行时不会被保留,但也不保证它们是新分配的。因此,对对象文字的位置进行直接比较的结果(使用==,!=,<,< =,>或> =)没有明确定义。这通常是用于调用isEqual:方法(或compare:方法)的代码中的一个简单错误。

正如文档所述,上面列出的警告只发生在对象之间使用直接比较运算符时,这几乎总是不是预期的操作。这种行为无关紧要,因此这两者几乎总是可以互换使用。

答案 1 :(得分:1)

@[]现代目标C

[NSArray array]的快捷方式

请查看The_Basics_of_Modern_Objective-C以获得更好的理解。

据我所知,当你使用@ []时,这将等同于相应的Class方法。的意思是:

@[]          = [NSArray array];
@[@"M",@"P"] = [NSArray arrayWithObjects:@"M",@"P",nil];

答案 2 :(得分:0)

这两者都很相似。

[NSArray array]@[]创建并返回一个空数组。

@[]是Objective-C中添加的新功能。它包含几种对象,并为您提供了快捷符号的灵活性。

  

使用Apple LLVM编译器4.0或更高版本,数组,词典和   可以使用创建数字(NSArray,NSDictionary,NSNumber类)   文字语法而不是方法。文字语法使用@符号   结合[],{},(),创建上面提到的类,   分别

更多参考HereLiterals