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 初始化方法的主要内容,如果未能解决你的问题,请参考以下文章
Objective C /iPhone:是不是可以重新初始化 NSArray?
NSDictionary 的 NSArray - 简单的初始化语法