NSArray 初始化方法

Posted

技术标签:

【中文标题】NSArray 初始化方法【英文标题】:NSArray initialization methods 【发布时间】:2013-01-23 15:45:09 【问题描述】:

用初始化数组有什么区别

NSArray * array = [NSArray array];

NSArray * array = @[];

【问题讨论】:

【参考方案1】:

@[] 是以下的简写:

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

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

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

一点也不像@"" 的简写,因为@"" 会产生一个编译时间常数,并且会导致在运行时没有消息传递时间>。事实上,@""(任何@"sequence")是一个特例,它发出一个编译时间常数,在运行时实现零消息传递;零活力。 @"..." 更类似于 Objective-C 类,而不是对象的常规实例。

【讨论】:

我认为 @"" 产生一个 NSString 对象而不是编译时间常数。 不;它实际上是一个编译时常量,它通过动态链接器加载,就像类和其他编译时发出的数据一样。不涉及消息传递。【参考方案2】:

NSArray * array = @[];NSArray * array = [NSArray array];的新方式

【讨论】:

1.与 Xcode 的版本无关(与使用的语言/标准/编译器的版本有关,Xcode 两者都不是)。 2.“和NSString *string = @"";一样”——我不这么认为。前者创建一个数组,后者创建一个字符串。 一个不错的猜测,但大多不正确。第一条正确,其余错误。 是的,没错。快速写下我的答案。编辑了我的答案。我的错。

以上是关于NSArray 初始化方法的主要内容,如果未能解决你的问题,请参考以下文章

NSArray 和 initWithTitle 方法

Objective C /iPhone:是不是可以重新初始化 NSArray?

从 NSArray 初始化结构?

NSDictionary 的 NSArray - 简单的初始化语法

字符串的静态 NSArray - 如何/在哪里初始化视图控制器

oc70--NSArray1