关于nsarray:@ [客观C中的意思是什么

What does @[ mean in objective C

本问题已经有最佳答案,请猛点这里访问。

例如:

1
2
3
[[FlyoutTableViewController alloc] initWithViewControllers:@[@[firstNavigationController],@[secondNavigationController]]];

- (id)initWithViewControllers:(NSArray *)viewControllers

我知道它正在向initwithviewcontrollers发送这些视图控制器的一个nsarray,但是我想了解更多关于这种创建数组的方法。有什么好处,有什么潜在的问题吗?

此外,对象、FirstNavigationController和SecondNavigationController是否也需要位于@[中,或者那里发生了什么?

蒂亚


我来给你做个类比。

"A String"C串

@"A String":obj-c字符串(NSString)

{1,2}(非[1,2]):c数组

@[@1, @2](非@[1,2]):obj-c数组(NSArray with NSNumber elements)


这是创建一个NSARRAY的简略方法。

1
NSArray *array = [[NSArray alloc] init];

等于

1
NSArray *array = @[];

您可以在这里看到更多的客观性C字面值。


它是一个数组文本。像字符串文字@"My String"。用于创建数组的简写符号。与NSString版本(不变)的用法和限制相似。

因此,@[firstNavigationController]创建了一个NSArray,其中只有一个项目。您的参数是一个数组数组。


这意味着您要用一个值定义一个数组。例如

1
@[value1, value2, value3]

@[item1, item2, item3][NSArray arrayWithObjects:item1, item2, item3, nil]的语法糖。只不过是一个速记。没有比它扩展到的方法更多的好处或问题。

你可以把数组做成那样。@[@[item1]]是一个包含item1的单个数组的数组。